Browse Source

Merge pull request #81 from AtomicGameEngine/script_widget

New UI system, IPC AtomicPlayer, Web Player improvements, VS build improvements
JoshEngebretson 10 years ago
parent
commit
6639c0a8d2
100 changed files with 541 additions and 206 deletions
  1. 1 0
      .gitignore
  2. 32 0
      CLI/atomic-cli/bin/atomic-cli.js
  3. 1 1
      CLI/atomic-cli/lib/atomictool.js
  4. 247 0
      CLI/atomic-cli/lib/httpserver.js
  5. 4 2
      CMake/Modules/AtomicDesktop.cmake
  6. 4 2
      CMake/Modules/AtomicWeb.cmake
  7. 5 1
      CMakeLists.txt
  8. 73 0
      Data/AtomicEditor/Deployment/Web/AtomicLoader.js
  9. 58 177
      Data/AtomicEditor/Deployment/Web/AtomicPlayer.html
  10. 10 9
      Data/AtomicEditor/Deployment/Web/AtomicResources_js.template
  11. 30 0
      Data/AtomicEditor/Deployment/Web/index.html
  12. 39 14
      Data/AtomicPlayer/Resources/CoreData/AtomicModules/AtomicGame.js
  13. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/fonts/vera.ttf
  14. 16 0
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/language/lng_en.tb.txt
  15. 16 0
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/language/lng_sv.tb.txt
  16. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/TBSectionContainer.png
  17. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/TBSectionContainer.psd
  18. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/TBSectionHeader.psd
  19. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/arrow.psd
  20. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/arrow_down.png
  21. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  22. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  23. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  24. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/arrow_left.png
  25. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  26. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  27. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  28. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/arrow_right.png
  29. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  30. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  31. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  32. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/arrow_up.png
  33. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  34. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  35. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  36. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button.png
  37. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button.psd
  38. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_flat.psd
  39. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_flat_outline.png
  40. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_flat_pressed.png
  41. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped.psd
  42. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_first_down.png
  43. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_first_up.png
  44. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_last_down.png
  45. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_last_up.png
  46. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_middle_down.png
  47. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_middle_up.png
  48. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_pressed.png
  49. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/checkbox.png
  50. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  51. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  52. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  53. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/checkbox_mark.png
  54. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  55. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  56. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  57. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/checkbox_pressed.png
  58. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  59. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  60. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  61. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/checkradio.psd
  62. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/container.png
  63. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/container.psd
  64. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/dropdown_button.psd
  65. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/editfield.png
  66. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/editfield.psd
  67. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/fadeout.psd
  68. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/fadeout_x.png
  69. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/fadeout_y.png
  70. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/focus.psd
  71. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/focus_r4.png
  72. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/focus_tabbutton_left.png
  73. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/focus_tabbutton_top.png
  74. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/hover.psd
  75. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/item.psd
  76. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/item_hover.png
  77. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/item_selected.png
  78. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/item_separator_x.png
  79. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/item_separator_y.png
  80. 5 0
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/license.txt
  81. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/messageicon.psd
  82. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/mover_tile.psd
  83. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/progress_spinner_gear.psd
  84. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/progress_spinner_strip.png
  85. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  86. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/progress_x.psd
  87. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/progress_y.psd
  88. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/radio.png
  89. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  90. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  91. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  92. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/radio_mark.png
  93. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  94. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  95. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  96. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/radio_pressed.png
  97. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  98. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  99. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]
  100. BIN
      Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/resizer.png

+ 1 - 0
.gitignore

@@ -5,6 +5,7 @@ Bin/Atomic.d.ts
 Bin/Atomic.js
 Bin/*.pak
 Source/Atomic/Javascript/Modules/*
+Data/AtomicPlayer/Resources/CoreData/Shaders/HLSL/Cache
 Artifacts/*
 Build/*
 Docs/out/*

+ 32 - 0
CLI/atomic-cli/bin/atomic-cli.js

@@ -131,6 +131,25 @@ program
 
   });
 
+
+  program
+    .command('build <platform>')
+    .option('--project <path>')
+    .description('builds the project for the specified platform')
+    .action(function(platform, options) {
+      if(options.project) {
+        process.chdir(options.project)
+      }
+      cli.build(platform)
+      .then(function () {
+      })
+      .catch(function (error) {
+          process.exit(1);
+      });
+
+    });
+
+
 program
   .command('edit [path_to_project]')
   .description('edits the project in the cwd or on at a specified path')
@@ -140,6 +159,19 @@ program
     cli.atomiceditor(["-project", path], {output:true});
   });
 
+// http server
+program
+  .command('serve')
+  .option('-p, --port [8000]', 'The port to run the server on [8000]', '8000')
+  .description('start a http server on the specified port which serves the current folder')
+  .action(function(options) {
+    var args = {}
+    args.port = options.port;
+    var server = require("../lib/httpserver");
+    server.run(args)
+  });
+
+
   program.parse(process.argv);
 
   if (!program.args.length) program.help();

+ 1 - 1
CLI/atomic-cli/lib/atomictool.js

@@ -87,7 +87,7 @@ var run = function (platform, opts) {
 var exec = function (command, flags, opts) {
     opts = opts || {};
     if (opts.verbose !== false) {
-        //console.log([command].concat(flags).join(" "));
+        console.log([command].concat(flags).join(" "));
     }
 
     var deferred = Q.defer();

+ 247 - 0
CLI/atomic-cli/lib/httpserver.js

@@ -0,0 +1,247 @@
+// https://github.com/andrewpthorp/simple-http-server
+
+/*
+// Command Line Parameters
+var argv, options;
+argv = require('optimist').argv;
+options = {};
+if (argv.p) options.port = argv.p;
+if (argv.port) options.port = argv.port;
+if (argv.d) options.directory = argv.d;
+if (argv.directory) options.directory = argv.directory;
+if (argv.nocolors) options.colors = false;
+if (argv.nologs) options.nologs = true;
+if (argv.help) options.help = true;
+// Run the Server!
+var url = require('../lib/server').run(options);
+*/
+
+
+/**
+ * simple-http-server
+ *
+ * This will serve up static html, css, and javascript
+ * from the current directory, or a specified directory/port
+ *
+ * @author Andrew Thorp
+ */
+(function(){
+
+  var SWITCHES, BANNER, colors, libs, config, printLine, server;
+
+  // colors = require('colors');
+
+  libs = exports.libs = {
+    http: require('http'),
+    url: require('url'),
+    fs: require('fs'),
+    path: require('path')
+  };
+
+  config = exports.config = {
+    port: 8000,
+    directory: process.cwd(),
+    colors: false,
+    nologs: false
+  };
+
+  printLine = exports.printLine = function(line) {
+
+    // Strip All Colors
+    if (!config.colors){
+      return process.stdout.write(line.stripColors + '\n');
+    } else {
+      return process.stdout.write(line + '\n');
+    }
+
+  };
+
+  /**
+   * getMimeType
+   *
+   * Utility function that returns the mimeType of a given file
+   *
+   * @author Andrew Thorp
+   */
+  getMimeType = exports.getMimeType = function(file){
+    var i = file.lastIndexOf("."),
+        ext = (i === -1) ? "default" : file.substr(i),
+        mimeTypes = {
+          ".bmp": "image/bmp",
+          ".css": "text/css",
+          ".gif": "image/gif",
+          ".htm": "text/html",
+          ".html": "text/html",
+          ".jpg": "image/jpeg",
+          ".jpeg": "image/jpeg",
+          ".js": "application/javascript",
+          ".json": "application/json",
+          ".otf": "font/opentype",
+          ".png": "image/png",
+          ".text": "text/plain",
+          "default": "application/octet-stream"
+        };
+
+    return mimeTypes[ext.toLowerCase()];
+  }
+
+  BANNER = 'Usage: nserver [options]\n\nIf called without options, `nserver` will listen to the current directory on port ' + config.port + '.';
+
+  SWITCHES =  [
+                ['-d', '--directory', 'root directory to listen to'],
+                ['-p', '--port', 'port to listen on'],
+                ['', '--launch', 'launch the server in your default browser after starting'],
+                ['', '--nocolors', 'disable colors, default: false'],
+                ['', '--nologs', 'disable request logs, default: false'],
+                ['', '--help', 'show this help screen']
+              ];
+
+  /**
+   * run
+   *
+   * This function is what fires off the server
+   * if --help is passed as a flag, it will print the
+   * help screen. If not, the server will start.
+   *
+   * @author Andrew Thorp
+   */
+  exports.run = function(options){
+
+    // Options
+    if (options !== undefined){
+      if (options.help !== undefined) return usage();
+      if (options.port !== undefined) exports.config.port = config.port = options.port;
+      if (options.directory !== undefined) exports.config.directory = config.directory = options.directory;
+      if (options.colors !== undefined) exports.config.colors = config.colors = options.colors;
+      if (options.nologs !== undefined) exports.config.nologs = config.nologs = options.nologs;
+    }
+
+    // Fire off the server!
+    server = libs.http.createServer(function(request, response) {
+
+      var url = libs.url.parse(request.url, true),
+          path = decodeURIComponent(url.pathname),
+          result = request.method + " " + path.bold,
+          fileCount = 0;
+
+      // Default file to index.html
+      if (path === "/") path += "index.html";
+
+      var fullPath = libs.path.join(config.directory, path);
+
+      libs.fs.exists(fullPath, function(exists){
+
+        if (exists) {
+          libs.fs.readFile(fullPath, function(error, data) {
+            if (!error){
+              response.writeHead(200, {
+                'content-type': getMimeType(fullPath)
+              });
+              response.write(data);
+              response.end();
+              result += " - 200 OK".green;
+              logString(result);
+            } else {
+              result += " - 500 Internal Server Error".red;
+              logString(result);
+            }
+          });
+        } else {
+          response.writeHead(404, {});
+          response.write("<h1>404 - Not Found</h1>");
+          response.end();
+          result += " - 404 Not Found".red;
+          logString(result);
+        }
+
+      });
+
+    }).listen(config.port);
+
+    logString();
+
+    // Return the URL
+    return "http://localhost:" + config.port + "/";
+
+  };
+
+  /**
+   * stop
+   *
+   * Stop the current server (if it is running)
+   *
+   * @author Andrew Thorp
+   */
+  exports.stop = function(){
+    if (server){
+      server.close();
+    }
+  }
+
+  /**
+   * usage
+   *
+   * print the help screen
+   *
+   * @author Andrew Thorp
+   */
+  var usage = function(){
+    var lines, spaces, i, len, switchLength, currSwitch, spaces, shortFlag, longFlag;
+
+    lines = [];
+    lines.unshift("" + BANNER + "\n");
+
+    for (i = 0, len = SWITCHES.length; i < len; i++){
+      currSwitch = SWITCHES[i];
+      spaces = Array(16 - currSwitch[1].length).join(' ');
+
+      if (currSwitch[0] === ""){
+        shortFlag = "    ";
+      } else {
+        shortFlag = currSwitch[0] + ", ";
+      }
+
+      longFlag = currSwitch[1];
+
+      lines.push('   ' + shortFlag + longFlag + spaces + currSwitch[2]);
+    }
+
+    return printLine("\n" + (lines.join('\n')) + "\n");
+  };
+
+
+  /**
+   * logString
+   *
+   * log a string (used for requests)
+   *
+   * @variable string (if not passed, connection string is printed)
+   * @author Andrew Thorp
+   */
+  var logString = exports.logString = function(string){
+    if (config.nologs) return;
+
+    if (string !== undefined){
+      printLine(string);
+      return;
+    }
+
+    var consoleStrings, currDir;
+
+    consoleStrings = {
+      server: "simple-http-server".bold,
+      directory: config.directory.green,
+      shortDir: "./".green,
+      url: "http://localhost:".green + config.port.toString().green + "/".green
+    }
+
+    if (__dirname.indexOf(consoleStrings.directory.stripColors) !== -1){
+      currDir = consoleStrings.shortDir;
+    } else {
+      currDir = consoleStrings.directory;
+    }
+
+    printLine("\n" + consoleStrings.server + " Now Serving: " + currDir + " at " + consoleStrings.url + "\n");
+  };
+
+}());

+ 4 - 2
CMake/Modules/AtomicDesktop.cmake

@@ -1,4 +1,6 @@
 
-add_definitions( -DATOMIC_TBUI -DATOMIC_FILEWATCHER )
+include_directories(${CMAKE_SOURCE_DIR}/Source/ThirdParty/Poco/Foundation/include)
 
-set (ATOMIC_LINK_LIBRARIES ${ATOMIC_LINK_LIBRARIES} LibCpuId SQLite TurboBadger)
+add_definitions( -DATOMIC_TBUI -DATOMIC_FILEWATCHER -DPOCO_NO_AUTOMATIC_LIBS)
+
+set (ATOMIC_LINK_LIBRARIES ${ATOMIC_LINK_LIBRARIES} LibCpuId SQLite)

+ 4 - 2
CMake/Modules/AtomicWeb.cmake

@@ -1,5 +1,7 @@
 
 add_definitions(-DATOMIC_PLATFORM_WEB)
-add_definitions(-DATOMIC_OPENGL -Wno-warn-absolute-paths)
+add_definitions(-DATOMIC_OPENGL -Wno-warn-absolute-paths -DATOMIC_TBUI)
 
-list (APPEND ATOMIC_LINK_LIBRARIES)
+set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-invalid-offsetof -std=gnu++0x")
+
+set (ATOMIC_LINK_LIBRARIES ${ATOMIC_LINK_LIBRARIES})

+ 5 - 1
CMakeLists.txt

@@ -5,12 +5,16 @@ cmake_minimum_required (VERSION 2.8)
 
 set (CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/CMake/Modules)
 
+add_definitions(-DATOMIC_ROOT_SOURCE_DIR="${CMAKE_SOURCE_DIR}" -DATOMIC_ROOT_BUILD_DIR="${CMAKE_BINARY_DIR}")
+
 add_definitions( -DATOMIC_API= -DATOMIC_STATIC_DEFINE -DATOMIC_ATOMIC2D -DATOMIC_LOGGING)
 
+add_definitions( -DATOMIC_DEV_BUILD )
+
 # this is here as QtCreator is having trouble picking up #include <Atomic/*> without it
 include_directories(${CMAKE_SOURCE_DIR}/Source ${CMAKE_SOURCE_DIR}/Source/AtomicEditor/Source)
 
-set (ATOMIC_LINK_LIBRARIES Atomic Box2D Duktape FreeType JO LZ4 PugiXml STB)
+set (ATOMIC_LINK_LIBRARIES Atomic Box2D Duktape TurboBadger FreeType JO LZ4 PugiXml STB)
 
 if (NOT ATOMIC_BUILD_2D)
     add_definitions( -DATOMIC_PHYSICS -DATOMIC_3D)

+ 73 - 0
Data/AtomicEditor/Deployment/Web/AtomicLoader.js

@@ -0,0 +1,73 @@
+
+var Module;
+/*
+window.onerror = function(event) {
+  // TODO: do not warn on ok events like simulating an infinite loop or exitStatus
+  Module.setStatus('Exception thrown, see JavaScript console');
+  Module.setStatus = function(text) {
+    if (text) Module.printErr('[post-exception status] ' + text);
+  };
+};
+*/
+
+var AtomicLoader = function(playerCanvas, spinner, width, height) {
+
+  AtomicLoader.instance = this;
+
+  this.playerCanvas = playerCanvas;
+  this.spinner = spinner;
+  this.width = width;
+  this.height = height;
+
+  playerCanvas.width = width;
+  playerCanvas.height = height;
+
+  // starts invisible
+  playerCanvas.style.display = 'none';
+
+  this.backgroundImageData = null;
+
+  this.progress = 0.0;
+  this.progressText = "Downloading"
+
+  this.initModuleObject();
+
+}
+
+AtomicLoader.prototype.constructor = AtomicLoader;
+
+AtomicLoader.prototype.initModuleObject = function() {
+
+  Module = {
+
+    arguments: ["-x", AtomicLoader.instance.width.toString(), "-y", AtomicLoader.instance.height.toString()],
+
+    preRun:[function() {
+      var loader = AtomicLoader.instance;
+    }],
+
+    postRun: [function() {
+      var loader = AtomicLoader.instance;
+      loader.playerCanvas.style.display = 'block';
+      loader.spinner.style.display = 'none';
+    }],
+
+    canvas: (function() {
+      var loader = AtomicLoader.instance;
+      // As a default initial behavior, pop up an alert when webgl context is lost. To make your
+      // application robust, you may want to override this behavior before shipping!
+      // See http://www.khronos.org/registry/webgl/specs/latest/1.0/#5.15.2
+      loader.playerCanvas.addEventListener("webglcontextlost", function(e) { alert('WebGL context lost. You will need to reload the page.'); e.preventDefault(); }, false);
+      return loader.playerCanvas;
+    })(),
+
+    setStatus: function(text) {
+
+    },
+    totalDependencies: 0,
+    monitorRunDependencies: function(left) {
+      this.totalDependencies = Math.max(this.totalDependencies, left);
+      Module.setStatus(left ? 'Preparing... (' + (this.totalDependencies-left) + '/' + this.totalDependencies + ')' : 'All downloads complete.');
+    }
+  };
+}

File diff suppressed because it is too large
+ 58 - 177
Data/AtomicEditor/Deployment/Web/AtomicPlayer.html


+ 10 - 9
Data/AtomicEditor/Deployment/Web/AtomicResources_js.template

@@ -24,9 +24,9 @@ Module.expectedDataFileDownloads++;
     var REMOTE_PACKAGE_NAME = typeof Module['locateFile'] === 'function' ?
                               Module['locateFile'](REMOTE_PACKAGE_BASE) :
                               ((Module['filePackagePrefixURL'] || '') + REMOTE_PACKAGE_BASE);
-    var REMOTE_PACKAGE_SIZE = 1265134;
+    var REMOTE_PACKAGE_SIZE = $$REMOTE_PACKAGE_SIZE$$;
     var PACKAGE_UUID = 'd832f5b3-9296-453e-be32-e9a18cf5c8c7';
-  
+
     function fetchRemotePackage(packageName, packageSize, callback, errback) {
       var xhr = new XMLHttpRequest();
       xhr.open('GET', packageName, true);
@@ -71,7 +71,7 @@ Module.expectedDataFileDownloads++;
     function handleError(error) {
       console.error('package error:', error);
     };
-  
+
       var fetched = null, fetchedCallback = null;
       fetchRemotePackage(REMOTE_PACKAGE_NAME, REMOTE_PACKAGE_SIZE, function(data) {
         if (fetchedCallback) {
@@ -81,7 +81,7 @@ Module.expectedDataFileDownloads++;
           fetched = data;
         }
       }, handleError);
-    
+
   function runWithFS() {
 
 function assert(check, msg) {
@@ -122,14 +122,15 @@ function assert(check, msg) {
         this.requests[this.name] = null;
       },
     };
-      $$ATOMIC_RESOURCES_DATA_REQUEST$$
+
+    $$ATOMIC_RESOURCES_DATA_REQUEST$$
 
     function processPackageData(arrayBuffer) {
       Module.finishedDataFileDownloads++;
       assert(arrayBuffer, 'Loading data file failed.');
       var byteArray = new Uint8Array(arrayBuffer);
       var curr;
-      
+
       // copy the entire loaded file into a spot in the heap. Files will refer to slices in that. They cannot be freed though.
       var ptr = Module['_malloc'](byteArray.length);
       Module['HEAPU8'].set(byteArray, ptr);
@@ -139,9 +140,9 @@ function assert(check, msg) {
 
     };
     Module['addRunDependency']('datafile_AtomicResources.data');
-  
+
     if (!Module.preloadResults) Module.preloadResults = {};
-  
+
       Module.preloadResults[PACKAGE_NAME] = {fromCache: false};
       if (fetched) {
         processPackageData(fetched);
@@ -149,7 +150,7 @@ function assert(check, msg) {
       } else {
         fetchedCallback = processPackageData;
       }
-    
+
   }
   if (Module['calledRun']) {
     runWithFS();

+ 30 - 0
Data/AtomicEditor/Deployment/Web/index.html

@@ -0,0 +1,30 @@
+
+
+
+<center>
+<h3> Atomic Web Player</h3>
+<iframe id="playerframe" src="AtomicPlayer.html" width="800" height="512", marginwidth="0", marginheight="0", frameborder="0", scrolling="no"></iframe>
+</center>
+
+<h4>New Features:</h4>
+
+* Embed the Atomic Web Player in a page <br>
+* Asset Precaching <br>
+* New UI system (WIP) <br>
+* Game loop with proper cleanup <br>
+* Built from the atomic-cli  <br>
+* Optimizations <br>
+
+<h4>Known Issues:</h4>
+
+* Slow startup speed issue on Chrome 42 (fixed in 44 Canary) <br>
+* Enable blur for cool Post Process feature, er BUG! <br><br>
+
+<script>
+function focus()
+{
+    var iframe = document.getElementById('playerframe');
+    iframe.contentWindow.focus();
+}
+window.setInterval(focus, 100);
+</script>

+ 39 - 14
Data/AtomicPlayer/Resources/CoreData/AtomicModules/AtomicGame.js

@@ -4,18 +4,25 @@ Atomic.editor = null;
 function Game() {
 
 	this.engine = Atomic.getEngine();
-	this.cache = Atomic.getResourceCache();	
+	this.cache = Atomic.getResourceCache();
 	this.renderer = Atomic.getRenderer();
 	this.graphics = Atomic.getGraphics();
 	this.input = Atomic.getInput();
-    this.ui = Atomic.getUI();
 
-    this.input.setMouseVisible(true);
+  this.input.setMouseVisible(true);
 
-    if (Atomic.platform == "Android") {
-        this.renderer.reuseShadowMaps = false;
-        this.renderer.shadowQuality = Atomic.SHADOWQUALITY_LOW_16BIT;
-    }
+  if (Atomic.platform == "Android") {
+      this.renderer.reuseShadowMaps = false;
+      this.renderer.shadowQuality = Atomic.SHADOWQUALITY_LOW_16BIT;
+  }
+
+	// initialize the UI subsystem
+	// TODO: this needs to take a config with default font
+	// skin, etc
+	Atomic.UI.__init();
+
+	// root view
+	this.uiView = new Atomic.UIView();
 
 }
 
@@ -63,18 +70,18 @@ Game.prototype.showDebugHud = function() {
 
 Game.prototype.createScene2D = function() {
 
-	var scene = new Atomic.Scene();
+		var scene = new Atomic.Scene();
     scene.createComponent("Octree");
 
     var cameraNode = scene.createChild("Camera");
     cameraNode.position = [0.0, 0.0, -10.0];
 
-    var camera = cameraNode.createComponent("Camera");    
+    var camera = cameraNode.createComponent("Camera");
     camera.orthographic = true;
     camera.orthoSize = this.graphics.height * Atomic.PIXEL_SIZE;
 
     var viewport = null;
-    
+
     if (Atomic.editor) {
         viewport = Atomic.editor.setView(scene, camera);
     } else {
@@ -85,12 +92,31 @@ Game.prototype.createScene2D = function() {
     this.scene = scene;
     this.cameraNode = cameraNode;
     this.camera = camera;
-    this.viewport = viewport;    
+    this.viewport = viewport;
 
     return scene;
 
 }
 
+Game.prototype.dumpMetrics = function() {
+
+	var metrics = Atomic.getVM().metrics;
+  metrics.capture();
+  print("--------------");
+  print("Object Instances:");
+  print("--------------");
+  metrics.dump();
+	print("--------------");
+  print("Nodes:");
+  print("--------------");
+  metrics.dumpNodes();
+  print("--------------");
+  print("JS Components:");
+  print("--------------");
+  metrics.dumpJSComponents();
+
+}
+
 Game.prototype.createScene3D = function(filename) {
 
     var scene = new Atomic.Scene();
@@ -103,7 +129,7 @@ Game.prototype.createScene3D = function(filename) {
     var cameraNode = scene.createChild("Camera");
     cameraNode.position = [0.0, 0.0, -10.0];
 
-    var camera = cameraNode.createComponent("Camera");    
+    var camera = cameraNode.createComponent("Camera");
 
     var viewport = null;
     if (Atomic.editor) {
@@ -116,7 +142,7 @@ Game.prototype.createScene3D = function(filename) {
     this.scene = scene;
     this.cameraNode = cameraNode;
     this.camera = camera;
-    this.viewport = viewport;    
+    this.viewport = viewport;
 
     return scene;
 
@@ -124,4 +150,3 @@ Game.prototype.createScene3D = function(filename) {
 
 
 Atomic.game = exports.game = new Game();
-

BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/fonts/vera.ttf


+ 16 - 0
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/language/lng_en.tb.txt

@@ -0,0 +1,16 @@
+cut Cut
+copy Copy
+paste Paste
+delete Delete
+selectall Select all
+undo Undo
+redo Redo
+TBMessageWindow.ok Ok
+TBMessageWindow.cancel Cancel
+TBMessageWindow.yes Yes
+TBMessageWindow.no No
+TBList.header Showing %d of %d
+new New
+save Save
+close Close
+search Search

+ 16 - 0
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/language/lng_sv.tb.txt

@@ -0,0 +1,16 @@
+cut Klipp ut
+copy Kopiera
+paste Klistra in
+delete Ta bort
+selectall Markera all
+undo Ångra
+redo Gör om
+TBMessageWindow.ok Ok
+TBMessageWindow.cancel Avbryt
+TBMessageWindow.yes Ja
+TBMessageWindow.no Nej
+TBList.header Visar %d av %d
+new Ny
+save Spara
+close Stäng
+search Sök

BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/TBSectionContainer.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/TBSectionContainer.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/TBSectionHeader.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/arrow.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/arrow_down.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/arrow_left.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/arrow_right.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/arrow_up.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_flat.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_flat_outline.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_flat_pressed.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_first_down.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_first_up.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_last_down.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_last_up.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_middle_down.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_grouped_x_middle_up.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/button_pressed.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/checkbox.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/checkbox_mark.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/checkbox_pressed.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/checkradio.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/container.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/container.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/dropdown_button.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/editfield.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/editfield.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/fadeout.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/fadeout_x.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/fadeout_y.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/focus.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/focus_r4.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/focus_tabbutton_left.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/focus_tabbutton_top.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/hover.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/item.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/item_hover.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/item_selected.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/item_separator_x.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/item_separator_y.png


+ 5 - 0
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/license.txt

@@ -0,0 +1,5 @@
+This is the default skin of Turbo Badger.
+The license of the skin is Public Domain.
+
+For more information about Turbo Badger and its license,
+see tb_core.h.

BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/messageicon.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/mover_tile.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/progress_spinner_gear.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/progress_spinner_strip.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/progress_x.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/progress_y.psd


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/radio.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/radio_mark.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/radio_pressed.png


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/[email protected]


BIN
Data/AtomicPlayer/Resources/PlayerData/DefaultUI/skin/resizer.png


Some files were not shown because too many files changed in this diff