Browse Source

WinJS application now using listView to show available scenes.
Listing all babylon demos scene in a group, and user customs scenes in an other group.
Adding a back button to go back to scenes listing page.

Nicolas Obré 11 years ago
parent
commit
0a4df8a7b5

+ 8 - 0
Tools/BuildOurOwnBabylonJS/BuildOurOwnBabylonJSWinJSApp/pages/babylonScene/babylonScene.html

@@ -1,12 +1,20 @@
 <!DOCTYPE html>
 <html>
 <head>
+    <!-- WinJS references -->
+    <link href="//Microsoft.WinJS.2.0/css/ui-dark.css" rel="stylesheet" />
+    <script src="//Microsoft.WinJS.2.0/js/base.js"></script>
+    <script src="//Microsoft.WinJS.2.0/js/ui.js"></script>
+
     <title>BabylonScene</title>
     <script src="babylonScene.js"></script>
     <script src="/js/ourOwnBabylon.js"></script>
     <link href="babylonScene.css" rel="stylesheet" />
 </head>
 <body>
+    <div data-win-control="WinJS.UI.NavBar">
+        <button class="backButton" data-win-control="WinJS.UI.BackButton"></button>
+    </div>
     <div id="babylonScene">
         <canvas id="babylonCanvas"></canvas>
     </div>

+ 2 - 8
Tools/BuildOurOwnBabylonJS/BuildOurOwnBabylonJSWinJSApp/pages/babylonScene/babylonScene.js

@@ -9,17 +9,11 @@
             var canvas = element.querySelector("#babylonCanvas");
             engine = new BABYLON.Engine(canvas, true);
 
-            BABYLON.SceneLoader.Load("/BabylonJs-Demos/"+options.babylonFolder + "/", options.babylonFile, engine, function (scene) {
-                //scene = newScene;
-
+            BABYLON.SceneLoader.Load(options.babylonFolder + "/", options.babylonFile, engine, function (scene) {
                 scene.executeWhenReady(function () { 
                     if (!scene.activeCamera) {
-                        scene.activeCamera = new BABYLON.ArcRotateCamera("DefaultCamera", Math.PI / 2, 0, 10, new BABYLON.Vector3.Zero(), scene);
+                        scene.activeCamera = new BABYLON.ArcRotateCamera("DefaultCamera", -Math.PI / 2, Math.PI / 2, 10, new BABYLON.Vector3.Zero(), scene);
                         scene.activeCamera.zoomOn();
-                        /*var cube = BABYLON.Mesh.CreateSphere("test", 10, 1, scene);
-                        cube.material = new BABYLON.StandardMaterial("test", scene);
-                        cube.material.emissiveColor = new BABYLON.Color3(1.0, 0.0, 0.0);
-                        cube.position = scene.activeCamera.target;*/
                     }
                     if (scene.lights.length == 0) {
                         var light = new BABYLON.HemisphericLight("Default light", new BABYLON.Vector3(0, 1, 0), scene);

+ 13 - 0
Tools/BuildOurOwnBabylonJS/BuildOurOwnBabylonJSWinJSApp/pages/home/home.css

@@ -2,3 +2,16 @@
     margin-left: 120px;
     margin-right: 120px;
 }
+
+.ListItem {
+    width: 150px;
+    height: 100px;
+    background-image: radial-gradient(#606060, #808080);
+    text-shadow: black 0.1em 0.1em 0.2em;
+    padding: 5px 10px;
+}
+
+#babylonScenesListView {
+    height: 100%;
+    margin: 0px 10px;
+}

+ 23 - 2
Tools/BuildOurOwnBabylonJS/BuildOurOwnBabylonJSWinJSApp/pages/home/home.html

@@ -16,7 +16,28 @@
     <script src="/pages/home/home.js"></script>
 </head>
 <body>
-    <h1>It sun a game</h1>
-    <ul id="babylonScenes"></ul>
+    <div id="ListHeaderTemplate" data-win-control="WinJS.Binding.Template" style="display: none">
+        <div class="sceneListHeader">
+            <h2 data-win-bind="innerText: title"></h2>
+        </div>
+    </div>
+    <div id="ListItemTemplate" data-win-control="WinJS.Binding.Template" style="display: none">
+        <div class="ListItem">
+            <h4 data-win-bind="textContent: title"></h4>
+            <h6 data-win-bind="textContent: text"></h6>
+        </div>
+    </div>
+
+    <div id="babylonScenesListView"
+         class="win-selectionstylefilled"
+         data-win-control="WinJS.UI.ListView"
+         data-win-options="{
+            itemDataSource: home.babylonScenes.groupedItemsList.dataSource,
+            itemTemplate: select('#ListItemTemplate'),
+            groupDataSource: home.babylonScenes.groupedItemsList.groups.dataSource,
+            groupHeaderTemplate: select('#ListHeaderTemplate'),
+            layout: { type: WinJS.UI.GridLayout }
+         }">
+    </div>
 </body>
 </html>

+ 43 - 21
Tools/BuildOurOwnBabylonJS/BuildOurOwnBabylonJSWinJSApp/pages/home/home.js

@@ -1,13 +1,41 @@
 (function () {
     "use strict";
 
+    var itemsList = new WinJS.Binding.List();
+
+    function getGroupKey(dataItem){
+        return dataItem.group;
+    }
+
+    function getGroupData(dataItem){
+        return {
+            title: dataItem.group
+        };
+    }
+
+    var groupedItemsList = itemsList.createGrouped(getGroupKey, getGroupData);
+
+    WinJS.Namespace.define("home.babylonScenes", {
+        groupedItemsList: groupedItemsList
+    });
+    WinJS.Namespace.define("home.userScenes", {
+        data: new WinJS.Binding.List()
+    });
+
     WinJS.UI.Pages.define("/pages/home/home.html", {
         // This function is called whenever a user navigates to this page. It
         // populates the page elements with the app's data.
         ready: function (element, options) {
-            Windows.ApplicationModel.Package.current.installedLocation.getFolderAsync("BabylonJS-Demos").then(function (folder) {
-                folder.getFoldersAsync().then(function (folders) {
-                    var ul = document.getElementById("babylonScenes");
+            element.querySelector("#babylonScenesListView").addEventListener("iteminvoked", function (event) {
+                event.detail.itemPromise.done(function (item) {
+                    WinJS.Navigation.navigate('/pages/babylonScene/babylonScene.html', { babylonFolder: item.data.folder, babylonFile: item.data.file });
+                });
+            });
+
+            var onSceneFolderOpenCallback = function (rootFolder) {
+                rootFolder.getFoldersAsync().then(function (folders) {
+                    var list = itemsList;
+                    var group = (rootFolder.name == "BabylonJS-Demos") ? "BabylonJS demos scenes" : "Your scenes"
                     folders.forEach(function (folder) {
                         folder.getFilesAsync().then(function (files) {
                             for (var j in files) {
@@ -19,29 +47,23 @@
                                 if (file.name.indexOf(".incremental.babylon") !== -1) {
                                     incremental = true;
                                 }
-                                var li = document.createElement("li");
-                                var button = document.createElement("button");
-                                button.className = "sceneButton";
-                                button.setAttribute("data-scene-folder", folder.name);
-                                button.setAttribute("data-scene-file", file.name);
-                                button.textContent = folder.displayName + ((incremental) ? " (incremental)" : "");
-                                li.innerHTML = button;
-                                ul.appendChild(button);
-
-                                button.addEventListener("click", onButtonClick)
+                                list.push({
+                                    title: folder.displayName.charAt(0).toUpperCase() + folder.displayName.slice(1),
+                                    text: file.name,
+                                    group: group,
+                                    folder: rootFolder.name + "/" + folder.name,
+                                    file: file.name
+                                });
                             }
                         });
                     });
                 });
-            }, function (error) {
-                var test = true;
-            });
-
-            var onButtonClick = function (event) {
-                var dataFolder = event.srcElement.getAttribute("data-scene-folder");
-                var dataFile = event.srcElement.getAttribute("data-scene-file")
-                WinJS.Navigation.navigate('/pages/babylonScene/babylonScene.html', { babylonFolder: dataFolder, babylonFile: dataFile });
             };
+
+            if (itemsList.length == 0) {
+                Windows.ApplicationModel.Package.current.installedLocation.getFolderAsync("BabylonJS-Demos").then(onSceneFolderOpenCallback);
+                Windows.ApplicationModel.Package.current.installedLocation.getFolderAsync("addToPackage").then(onSceneFolderOpenCallback);
+            }
         }
     });
 })();