atomictool.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. console.log(e);
  11. }
  12. var mode = process.env.ATOMIC_GAME_ENGINE_ENV || 'production';
  13. if (mode == 'dev')
  14. platform_cli.ATOMICTOOL_BIN = "/Users/josh/Dev/atomic/AtomicGameEngine-build/Source/AtomicTool/AtomicTool"
  15. // Commands ----------------------
  16. var newProject = function(folder) {
  17. return atomictool(["new", folder], {output:true});
  18. }
  19. var addPlatform = function (platform) {
  20. return atomictool(["platform-add", platform], {output:true});
  21. };
  22. var build = function (platform) {
  23. console.log("building");
  24. return atomictool(["build", platform], {output:true});
  25. };
  26. var run = function (platform, opts) {
  27. opts = opts || {};
  28. var debug = opts.debug;
  29. var run = function () {
  30. switch (platform) {
  31. case "web":
  32. var url = "http://localhost:" + HTTP_PORT + "/AtomicPlayer.html";
  33. console.log("Launching: " + url);
  34. var open = require("open");
  35. open(url);
  36. break;
  37. case "mac":
  38. var open = require("open");
  39. open(path.resolve("Build/Mac-Build/AtomicPlayer.app"));
  40. break;
  41. }
  42. };
  43. return opts.noBuild ? run(platform) : build([platform], opts).then(function () {
  44. return run();
  45. });
  46. };
  47. // Utils --------------
  48. var exec = function (command, flags, opts) {
  49. opts = opts || {};
  50. if (opts.verbose !== false) {
  51. console.log([command].concat(flags).join(" "));
  52. }
  53. var deferred = Q.defer();
  54. var child = spawn(command, flags, {stdio: (opts.output === false) ? "ignore" : "inherit"});
  55. child.on("close", function (code) {
  56. if (code && opts.check !== false) {
  57. deferred.reject();
  58. }
  59. deferred.resolve(code);
  60. });
  61. child.on("error", function (error) {
  62. deferred.reject(error);
  63. });
  64. return deferred.promise;
  65. };
  66. var atomictool = function (flags, opts) {
  67. opts = opts || {};
  68. flags.unshift(platform_cli.ATOMICEDITOR_DATADIR);
  69. flags.unshift("--cli-data-path");
  70. return exec(platform_cli.ATOMICTOOL_BIN, flags, opts);
  71. };
  72. module.exports = {
  73. "atomictool" : atomictool,
  74. "newProject" : newProject,
  75. "addPlatform" : addPlatform,
  76. "build" : build,
  77. "run" : run
  78. }