Przeglądaj źródła

Actions Builder

- Fixed target type selection
- Handle boolean values when editing actions
luaacro 10 lat temu
rodzic
commit
8b55a434c5

BIN
Exporters/3ds Max/Max2Babylon-0.20.zip


+ 1 - 0
Tools/ActionsBuilder/Sources/actionsbuilder.actionNode.js

@@ -84,3 +84,4 @@ var ActionsBuilder;
     })();
     ActionsBuilder.Action = Action;
 })(ActionsBuilder || (ActionsBuilder = {}));
+//# sourceMappingURL=actionsbuilder.actionNode.js.map

+ 1 - 0
Tools/ActionsBuilder/Sources/actionsbuilder.contextMenu.js

@@ -116,3 +116,4 @@ var ActionsBuilder;
     })();
     ActionsBuilder.ContextMenu = ContextMenu;
 })(ActionsBuilder || (ActionsBuilder = {}));
+//# sourceMappingURL=actionsbuilder.contextMenu.js.map

+ 1 - 0
Tools/ActionsBuilder/Sources/actionsbuilder.js

@@ -349,3 +349,4 @@ var ActionsBuilder;
     Elements.FLOW_CONTROLS.push({ name: "StateCondition", text: "state condition", properties: [{ targetType: "MeshProperties", text: "target", value: "" }, { text: "value", value: "" }], description: "A condition checking if the target object's state is equal to the given state. See \"set state\" action to set a state to an object." });
     Elements.FLOW_CONTROLS.push({ name: "Hub", text: "hub", properties: [], description: "The hub is internally used by the Combine Action. It allows to add children to the Combine Action" });
 })(ActionsBuilder || (ActionsBuilder = {}));
+//# sourceMappingURL=actionsbuilder.js.map

+ 2 - 0
Tools/ActionsBuilder/Sources/actionsbuilder.main.js

@@ -9,6 +9,7 @@ this.createJSON = function () {
     var structure = viewer.utils.createJSON(viewer.root);
     var asText = JSON.stringify(structure);
     actionsBuilderJsonInput.value = asText;
+    console.log(asText);
 };
 this.loadFromJSON = function () {
     var json = actionsBuilderJsonInput.value;
@@ -96,3 +97,4 @@ this.run = function () {
     list.createListsElements();
     list.onResize();
 };
+//# sourceMappingURL=actionsbuilder.main.js.map

+ 88 - 19
Tools/ActionsBuilder/Sources/actionsbuilder.max.js

@@ -467,6 +467,7 @@ this.createJSON = function () {
     var structure = viewer.utils.createJSON(viewer.root);
     var asText = JSON.stringify(structure);
     actionsBuilderJsonInput.value = asText;
+    console.log(asText);
 };
 this.loadFromJSON = function () {
     var json = actionsBuilderJsonInput.value;
@@ -604,6 +605,9 @@ var ActionsBuilder;
             var targetParameterNameSelect = null;
             var propertyPathSelect = null;
             var propertyPathOptionalSelect = null;
+            var booleanSelect = null;
+            var propertyInput = null;
+            var propertyPathIndice = 0;
             if (properties.length === 0) {
                 return;
             }
@@ -636,6 +640,7 @@ var ActionsBuilder;
                     targetParameterNameSelect.onchange = this._parameterTargetNameChanged(targetParameterSelect, targetParameterNameSelect, i);
                 }
                 else if (properties[i].text === "propertyPath") {
+                    propertyPathIndice = i;
                     // Create property path select
                     propertyPathSelect = document.createElement("select");
                     propertyPathSelect.className = "ParametersElementSelectClass";
@@ -645,7 +650,7 @@ var ActionsBuilder;
                     propertyPathOptionalSelect.className = "ParametersElementSelectClass";
                     this.parametersContainer.appendChild(propertyPathOptionalSelect);
                     // Events and configure
-                    (this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, i))(null);
+                    (this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, null, null, i))(null);
                     var property = this._action.propertiesResults[i].value.split(".");
                     if (property.length > 0) {
                         if (property.length === 1) {
@@ -667,7 +672,7 @@ var ActionsBuilder;
                         }
                     }
                     targetParameterSelect.onchange = this._parameterTargetChanged(targetParameterSelect, targetParameterNameSelect, propertyPathSelect, propertyPathOptionalSelect, i - 1);
-                    propertyPathSelect.onchange = this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, i);
+                    propertyPathSelect.onchange = this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, null, null, i);
                     propertyPathOptionalSelect.onchange = this._additionalPropertyPathSelectChanged(propertyPathSelect, propertyPathOptionalSelect, i);
                 }
                 else if (properties[i].text === "operator") {
@@ -689,22 +694,40 @@ var ActionsBuilder;
                     soundSelect.onchange = this._soundSelectChanged(soundSelect, i);
                 }
                 else {
-                    if (propertiesResults[i].value === "true" || propertiesResults[i].value === "false") {
-                        var booleanSelect = document.createElement("select");
-                        booleanSelect.className = "ParametersElementSelectClass";
-                        this.parametersContainer.appendChild(booleanSelect);
-                        // Configure event
-                        (this._booleanSelectChanged(booleanSelect, i))(null);
-                        booleanSelect.value = propertiesResults[i].value;
-                        booleanSelect.onchange = this._booleanSelectChanged(booleanSelect, i);
+                    var isBoolean = propertiesResults[i].value === "true" || propertiesResults[i].value === "false";
+                    var object = this._getObjectFromType(targetParameterSelect.value);
+                    if (object !== null) {
+                        var property = this._action.propertiesResults[i - 1].value.split(".");
+                        for (var j = 0; j < property.length && object !== undefined; j++) {
+                            object = object[property[j]];
+                            if (j === property.length - 1) {
+                                isBoolean = isBoolean || typeof object === "boolean";
+                            }
+                        }
+                    }
+                    booleanSelect = document.createElement("select");
+                    booleanSelect.className = "ParametersElementSelectClass";
+                    this.parametersContainer.appendChild(booleanSelect);
+                    // Configure event
+                    (this._booleanSelectChanged(booleanSelect, i))(null);
+                    booleanSelect.value = propertiesResults[i].value;
+                    booleanSelect.onchange = this._booleanSelectChanged(booleanSelect, i);
+                    propertyInput = document.createElement("input");
+                    propertyInput.value = propertiesResults[i].value;
+                    propertyInput.className = "ParametersElementInputClass";
+                    this.parametersContainer.appendChild(propertyInput);
+                    // Configure event
+                    propertyInput.onkeyup = this._propertyInputChanged(propertyInput, i);
+                    if (properties[i].text === "value") {
+                        propertyPathSelect.onchange = this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, booleanSelect, propertyInput, propertyPathIndice);
+                    }
+                    if (isBoolean) {
+                        this._viewer.utils.setElementVisible(booleanSelect, true);
+                        this._viewer.utils.setElementVisible(propertyInput, false);
                     }
                     else {
-                        var propertyInput = document.createElement("input");
-                        propertyInput.value = propertiesResults[i].value;
-                        propertyInput.className = "ParametersElementInputClass";
-                        this.parametersContainer.appendChild(propertyInput);
-                        // Configure event
-                        propertyInput.onkeyup = this._propertyInputChanged(propertyInput, i);
+                        this._viewer.utils.setElementVisible(booleanSelect, false);
+                        this._viewer.utils.setElementVisible(propertyInput, true);
                     }
                 }
             }
@@ -798,7 +821,7 @@ var ActionsBuilder;
         * @param additionalPropertyPathSelect: the additional propertyPath select element
         * @param indice: the properties indice in action.properties
         */
-        Parameters.prototype._propertyPathSelectChanged = function (targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, indice) {
+        Parameters.prototype._propertyPathSelectChanged = function (targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, booleanSelect, propertyInput, indice) {
             var _this = this;
             return function (event) {
                 if (propertyPathSelect.options.length === 0) {
@@ -815,6 +838,27 @@ var ActionsBuilder;
                 else {
                     // Set property
                     _this._action.propertiesResults[indice].value = propertyPathSelect.value;
+                    if (booleanSelect !== null && propertyInput !== null) {
+                        var object = _this._getObjectFromType(targetParameterSelect.value);
+                        var isBoolean = false;
+                        if (object !== null) {
+                            var property = _this._action.propertiesResults[indice].value.split(".");
+                            for (var j = 0; j < property.length; j++) {
+                                object = object[property[j]];
+                                if (j === property.length - 1) {
+                                    isBoolean = isBoolean || typeof object === "boolean";
+                                }
+                            }
+                        }
+                        if (isBoolean) {
+                            _this._viewer.utils.setElementVisible(booleanSelect, true);
+                            _this._viewer.utils.setElementVisible(propertyInput, false);
+                        }
+                        else {
+                            _this._viewer.utils.setElementVisible(booleanSelect, false);
+                            _this._viewer.utils.setElementVisible(propertyInput, true);
+                        }
+                    }
                 }
                 // Configure addition property
                 _this._fillAdditionalPropertyPath(targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect);
@@ -900,10 +944,17 @@ var ActionsBuilder;
                         option.value = options[i].targetType;
                         targetParameterSelect.options.add(option);
                     }
+                    targetParameterSelect.value = _this._action.propertiesResults[indice].targetType;
                 }
                 else {
                     _this._action.propertiesResults[indice].targetType = targetParameterSelect.value;
-                    _this._action.propertiesResults[indice].value = "";
+                    var names = _this._getListFromType(targetParameterSelect.value);
+                    if (names !== null && names.length > 0) {
+                        _this._action.propertiesResults[indice].value = names[0];
+                    }
+                    else {
+                        _this._action.propertiesResults[indice].value = "";
+                    }
                     if (propertyPathSelect !== null) {
                         _this._action.propertiesResults[indice + 1].value = ""; // propertyPath
                     }
@@ -918,11 +969,12 @@ var ActionsBuilder;
                         targetParameterNameSelect.options.add(option);
                     }
                 }
+                targetParameterNameSelect.value = _this._action.propertiesResults[indice].value;
                 // Clear property path
                 if (propertyPathSelect !== null) {
                     propertyPathSelect.options.length = 0;
                     additionalPropertyPathSelect.options.length = 0;
-                    _this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, indice + 1)(null);
+                    _this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, null, null, indice + 1)(null);
                 }
                 _this._sortList(targetParameterNameSelect);
                 _this._sortList(targetParameterSelect);
@@ -973,21 +1025,37 @@ var ActionsBuilder;
             }
             return null;
         };
+        Parameters.prototype._getListFromType = function (type) {
+            if (type === "MeshProperties" || type === "Mesh") {
+                return ActionsBuilder.SceneElements.MESHES;
+            }
+            if (type === "LightProperties" || type === "Light") {
+                return ActionsBuilder.SceneElements.LIGHTS;
+            }
+            if (type === "CameraProperties" || type === "Camera") {
+                return ActionsBuilder.SceneElements.CAMERAS;
+            }
+            return null;
+        };
         /*
         * Returns the object in function of the given type
         * @param type: the target type
         */
         Parameters.prototype._getObjectFromType = function (type) {
             if (type === "MeshProperties" || type === "Mesh") {
+                this._currentObject = ActionsBuilder.SceneElements.MESH;
                 return ActionsBuilder.SceneElements.MESH;
             }
             if (type === "LightProperties" || type === "Light") {
+                this._currentObject = ActionsBuilder.SceneElements.LIGHT;
                 return ActionsBuilder.SceneElements.LIGHT;
             }
             if (type === "CameraProperties" || type === "Camera") {
+                this._currentObject = ActionsBuilder.SceneElements.CAMERA;
                 return ActionsBuilder.SceneElements.CAMERA;
             }
             if (type === "SceneProperties" || type === "Scene") {
+                this._currentObject = ActionsBuilder.SceneElements.SCENE;
                 return ActionsBuilder.SceneElements.SCENE;
             }
             return null;
@@ -1944,6 +2012,7 @@ var ActionsBuilder;
             this.utils = new ActionsBuilder.Utils(this);
             // Finish
             this.parameters.parametersHelpElement.textContent = Viewer._DEFAULT_INFO_MESSAGE;
+            this.onResize(null);
         }
         Object.defineProperty(Viewer, "NODE_WIDTH", {
             get: function () {

+ 87 - 19
Tools/ActionsBuilder/Sources/actionsbuilder.parameters.js

@@ -48,6 +48,9 @@ var ActionsBuilder;
             var targetParameterNameSelect = null;
             var propertyPathSelect = null;
             var propertyPathOptionalSelect = null;
+            var booleanSelect = null;
+            var propertyInput = null;
+            var propertyPathIndice = 0;
             if (properties.length === 0) {
                 return;
             }
@@ -80,6 +83,7 @@ var ActionsBuilder;
                     targetParameterNameSelect.onchange = this._parameterTargetNameChanged(targetParameterSelect, targetParameterNameSelect, i);
                 }
                 else if (properties[i].text === "propertyPath") {
+                    propertyPathIndice = i;
                     // Create property path select
                     propertyPathSelect = document.createElement("select");
                     propertyPathSelect.className = "ParametersElementSelectClass";
@@ -89,7 +93,7 @@ var ActionsBuilder;
                     propertyPathOptionalSelect.className = "ParametersElementSelectClass";
                     this.parametersContainer.appendChild(propertyPathOptionalSelect);
                     // Events and configure
-                    (this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, i))(null);
+                    (this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, null, null, i))(null);
                     var property = this._action.propertiesResults[i].value.split(".");
                     if (property.length > 0) {
                         if (property.length === 1) {
@@ -111,7 +115,7 @@ var ActionsBuilder;
                         }
                     }
                     targetParameterSelect.onchange = this._parameterTargetChanged(targetParameterSelect, targetParameterNameSelect, propertyPathSelect, propertyPathOptionalSelect, i - 1);
-                    propertyPathSelect.onchange = this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, i);
+                    propertyPathSelect.onchange = this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, null, null, i);
                     propertyPathOptionalSelect.onchange = this._additionalPropertyPathSelectChanged(propertyPathSelect, propertyPathOptionalSelect, i);
                 }
                 else if (properties[i].text === "operator") {
@@ -133,22 +137,40 @@ var ActionsBuilder;
                     soundSelect.onchange = this._soundSelectChanged(soundSelect, i);
                 }
                 else {
-                    if (propertiesResults[i].value === "true" || propertiesResults[i].value === "false") {
-                        var booleanSelect = document.createElement("select");
-                        booleanSelect.className = "ParametersElementSelectClass";
-                        this.parametersContainer.appendChild(booleanSelect);
-                        // Configure event
-                        (this._booleanSelectChanged(booleanSelect, i))(null);
-                        booleanSelect.value = propertiesResults[i].value;
-                        booleanSelect.onchange = this._booleanSelectChanged(booleanSelect, i);
+                    var isBoolean = propertiesResults[i].value === "true" || propertiesResults[i].value === "false";
+                    var object = this._getObjectFromType(targetParameterSelect.value);
+                    if (object !== null) {
+                        var property = this._action.propertiesResults[i - 1].value.split(".");
+                        for (var j = 0; j < property.length && object !== undefined; j++) {
+                            object = object[property[j]];
+                            if (j === property.length - 1) {
+                                isBoolean = isBoolean || typeof object === "boolean";
+                            }
+                        }
+                    }
+                    booleanSelect = document.createElement("select");
+                    booleanSelect.className = "ParametersElementSelectClass";
+                    this.parametersContainer.appendChild(booleanSelect);
+                    // Configure event
+                    (this._booleanSelectChanged(booleanSelect, i))(null);
+                    booleanSelect.value = propertiesResults[i].value;
+                    booleanSelect.onchange = this._booleanSelectChanged(booleanSelect, i);
+                    propertyInput = document.createElement("input");
+                    propertyInput.value = propertiesResults[i].value;
+                    propertyInput.className = "ParametersElementInputClass";
+                    this.parametersContainer.appendChild(propertyInput);
+                    // Configure event
+                    propertyInput.onkeyup = this._propertyInputChanged(propertyInput, i);
+                    if (properties[i].text === "value") {
+                        propertyPathSelect.onchange = this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, booleanSelect, propertyInput, propertyPathIndice);
+                    }
+                    if (isBoolean) {
+                        this._viewer.utils.setElementVisible(booleanSelect, true);
+                        this._viewer.utils.setElementVisible(propertyInput, false);
                     }
                     else {
-                        var propertyInput = document.createElement("input");
-                        propertyInput.value = propertiesResults[i].value;
-                        propertyInput.className = "ParametersElementInputClass";
-                        this.parametersContainer.appendChild(propertyInput);
-                        // Configure event
-                        propertyInput.onkeyup = this._propertyInputChanged(propertyInput, i);
+                        this._viewer.utils.setElementVisible(booleanSelect, false);
+                        this._viewer.utils.setElementVisible(propertyInput, true);
                     }
                 }
             }
@@ -242,7 +264,7 @@ var ActionsBuilder;
         * @param additionalPropertyPathSelect: the additional propertyPath select element
         * @param indice: the properties indice in action.properties
         */
-        Parameters.prototype._propertyPathSelectChanged = function (targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, indice) {
+        Parameters.prototype._propertyPathSelectChanged = function (targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, booleanSelect, propertyInput, indice) {
             var _this = this;
             return function (event) {
                 if (propertyPathSelect.options.length === 0) {
@@ -259,6 +281,27 @@ var ActionsBuilder;
                 else {
                     // Set property
                     _this._action.propertiesResults[indice].value = propertyPathSelect.value;
+                    if (booleanSelect !== null && propertyInput !== null) {
+                        var object = _this._getObjectFromType(targetParameterSelect.value);
+                        var isBoolean = false;
+                        if (object !== null) {
+                            var property = _this._action.propertiesResults[indice].value.split(".");
+                            for (var j = 0; j < property.length; j++) {
+                                object = object[property[j]];
+                                if (j === property.length - 1) {
+                                    isBoolean = isBoolean || typeof object === "boolean";
+                                }
+                            }
+                        }
+                        if (isBoolean) {
+                            _this._viewer.utils.setElementVisible(booleanSelect, true);
+                            _this._viewer.utils.setElementVisible(propertyInput, false);
+                        }
+                        else {
+                            _this._viewer.utils.setElementVisible(booleanSelect, false);
+                            _this._viewer.utils.setElementVisible(propertyInput, true);
+                        }
+                    }
                 }
                 // Configure addition property
                 _this._fillAdditionalPropertyPath(targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect);
@@ -344,10 +387,17 @@ var ActionsBuilder;
                         option.value = options[i].targetType;
                         targetParameterSelect.options.add(option);
                     }
+                    targetParameterSelect.value = _this._action.propertiesResults[indice].targetType;
                 }
                 else {
                     _this._action.propertiesResults[indice].targetType = targetParameterSelect.value;
-                    _this._action.propertiesResults[indice].value = "";
+                    var names = _this._getListFromType(targetParameterSelect.value);
+                    if (names !== null && names.length > 0) {
+                        _this._action.propertiesResults[indice].value = names[0];
+                    }
+                    else {
+                        _this._action.propertiesResults[indice].value = "";
+                    }
                     if (propertyPathSelect !== null) {
                         _this._action.propertiesResults[indice + 1].value = ""; // propertyPath
                     }
@@ -362,11 +412,12 @@ var ActionsBuilder;
                         targetParameterNameSelect.options.add(option);
                     }
                 }
+                targetParameterNameSelect.value = _this._action.propertiesResults[indice].value;
                 // Clear property path
                 if (propertyPathSelect !== null) {
                     propertyPathSelect.options.length = 0;
                     additionalPropertyPathSelect.options.length = 0;
-                    _this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, indice + 1)(null);
+                    _this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, null, null, indice + 1)(null);
                 }
                 _this._sortList(targetParameterNameSelect);
                 _this._sortList(targetParameterSelect);
@@ -417,21 +468,37 @@ var ActionsBuilder;
             }
             return null;
         };
+        Parameters.prototype._getListFromType = function (type) {
+            if (type === "MeshProperties" || type === "Mesh") {
+                return ActionsBuilder.SceneElements.MESHES;
+            }
+            if (type === "LightProperties" || type === "Light") {
+                return ActionsBuilder.SceneElements.LIGHTS;
+            }
+            if (type === "CameraProperties" || type === "Camera") {
+                return ActionsBuilder.SceneElements.CAMERAS;
+            }
+            return null;
+        };
         /*
         * Returns the object in function of the given type
         * @param type: the target type
         */
         Parameters.prototype._getObjectFromType = function (type) {
             if (type === "MeshProperties" || type === "Mesh") {
+                this._currentObject = ActionsBuilder.SceneElements.MESH;
                 return ActionsBuilder.SceneElements.MESH;
             }
             if (type === "LightProperties" || type === "Light") {
+                this._currentObject = ActionsBuilder.SceneElements.LIGHT;
                 return ActionsBuilder.SceneElements.LIGHT;
             }
             if (type === "CameraProperties" || type === "Camera") {
+                this._currentObject = ActionsBuilder.SceneElements.CAMERA;
                 return ActionsBuilder.SceneElements.CAMERA;
             }
             if (type === "SceneProperties" || type === "Scene") {
+                this._currentObject = ActionsBuilder.SceneElements.SCENE;
                 return ActionsBuilder.SceneElements.SCENE;
             }
             return null;
@@ -481,3 +548,4 @@ var ActionsBuilder;
     })();
     ActionsBuilder.Parameters = Parameters;
 })(ActionsBuilder || (ActionsBuilder = {}));
+//# sourceMappingURL=actionsbuilder.parameters.js.map

+ 1 - 0
Tools/ActionsBuilder/Sources/actionsbuilder.toolbar.js

@@ -83,3 +83,4 @@ var ActionsBuilder;
     })();
     ActionsBuilder.Toolbar = Toolbar;
 })(ActionsBuilder || (ActionsBuilder = {}));
+//# sourceMappingURL=actionsbuilder.toolbar.js.map

+ 1 - 0
Tools/ActionsBuilder/Sources/actionsbuilder.utils.js

@@ -431,3 +431,4 @@ var ActionsBuilder;
     })();
     ActionsBuilder.Utils = Utils;
 })(ActionsBuilder || (ActionsBuilder = {}));
+//# sourceMappingURL=actionsbuilder.utils.js.map

+ 2 - 0
Tools/ActionsBuilder/Sources/actionsbuilder.viewer.js

@@ -36,6 +36,7 @@ var ActionsBuilder;
             this.utils = new ActionsBuilder.Utils(this);
             // Finish
             this.parameters.parametersHelpElement.textContent = Viewer._DEFAULT_INFO_MESSAGE;
+            this.onResize(null);
         }
         Object.defineProperty(Viewer, "NODE_WIDTH", {
             get: function () {
@@ -644,3 +645,4 @@ var ActionsBuilder;
     })();
     ActionsBuilder.Viewer = Viewer;
 })(ActionsBuilder || (ActionsBuilder = {}));
+//# sourceMappingURL=actionsbuilder.viewer.js.map

Plik diff jest za duży
+ 322 - 170
Tools/ActionsBuilder/Sources/babylon.max.js


Plik diff jest za duży
+ 4 - 1
Tools/ActionsBuilder/Sources/index-debug.html


+ 1 - 1
Tools/ActionsBuilder/Sources/index.css

@@ -64,7 +64,7 @@
     position: absolute;
 
     width: 100%;
-    height: 42px;
+    height: 45px;
 
     max-width: 100%;
     max-height: 42px;

+ 1 - 0
Tools/ActionsBuilder/actionsbuilder.main.ts

@@ -13,6 +13,7 @@ this.createJSON = () => {
     var structure = viewer.utils.createJSON(viewer.root);
     var asText = JSON.stringify(structure);
     actionsBuilderJsonInput.value = asText;
+    console.log(asText);
 };
 
 this.loadFromJSON = () => {

+ 109 - 22
Tools/ActionsBuilder/actionsbuilder.parameters.ts

@@ -5,6 +5,7 @@
 
         private _action: Action = null;
         private _viewer: Viewer;
+        private _currentObject: any;
 
         /*
         * Constructor
@@ -61,6 +62,11 @@
             var propertyPathSelect: HTMLSelectElement = null;
             var propertyPathOptionalSelect: HTMLSelectElement = null;
 
+            var booleanSelect: HTMLSelectElement = null;
+            var propertyInput: HTMLInputElement = null;
+
+            var propertyPathIndice = 0;
+
             if (properties.length === 0) {
                 return;
             }
@@ -99,6 +105,8 @@
                     targetParameterNameSelect.onchange = this._parameterTargetNameChanged(targetParameterSelect, targetParameterNameSelect, i);
                 }
                 else if (properties[i].text === "propertyPath") {
+                    propertyPathIndice = i;
+
                     // Create property path select
                     propertyPathSelect = document.createElement("select");
                     propertyPathSelect.className = "ParametersElementSelectClass";
@@ -110,7 +118,7 @@
                     this.parametersContainer.appendChild(propertyPathOptionalSelect);
 
                     // Events and configure
-                    (this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, i))(null);
+                    (this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, null, null, i))(null);
 
                     var property = this._action.propertiesResults[i].value.split(".");
                     if (property.length > 0) {
@@ -136,7 +144,7 @@
                     }
 
                     targetParameterSelect.onchange = this._parameterTargetChanged(targetParameterSelect, targetParameterNameSelect, propertyPathSelect, propertyPathOptionalSelect, i - 1);
-                    propertyPathSelect.onchange = this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, i);
+                    propertyPathSelect.onchange = this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, null, null, i);
                     propertyPathOptionalSelect.onchange = this._additionalPropertyPathSelectChanged(propertyPathSelect, propertyPathOptionalSelect, i);
                 }
                 else if (properties[i].text === "operator") {
@@ -160,24 +168,48 @@
                     soundSelect.onchange = this._soundSelectChanged(soundSelect, i);
                 }
                 else {
-                    if (propertiesResults[i].value === "true" || propertiesResults[i].value === "false") {
-                        var booleanSelect = document.createElement("select");
-                        booleanSelect.className = "ParametersElementSelectClass";
-                        this.parametersContainer.appendChild(booleanSelect);
-
-                        // Configure event
-                        (this._booleanSelectChanged(booleanSelect, i))(null);
-                        booleanSelect.value = propertiesResults[i].value;
-                        booleanSelect.onchange = this._booleanSelectChanged(booleanSelect, i);
+                    var isBoolean = propertiesResults[i].value === "true" || propertiesResults[i].value === "false";
+                    var object = this._getObjectFromType(targetParameterSelect.value);
+
+                    if (object !== null) {
+                        var property = this._action.propertiesResults[i - 1].value.split(".");
+
+                        for (var j = 0; j < property.length && object !== undefined; j++) {
+                            object = object[property[j]];
+                            if (j === property.length - 1) {
+                                isBoolean = isBoolean || typeof object === "boolean";
+                            }
+                        }
                     }
-                    else {
-                        var propertyInput = document.createElement("input");
-                        propertyInput.value = propertiesResults[i].value;
-                        propertyInput.className = "ParametersElementInputClass";
-                        this.parametersContainer.appendChild(propertyInput);
+                    
+                    booleanSelect = document.createElement("select");
+                    booleanSelect.className = "ParametersElementSelectClass";
+                    this.parametersContainer.appendChild(booleanSelect);
+
+                    // Configure event
+                    (this._booleanSelectChanged(booleanSelect, i))(null);
+                    booleanSelect.value = propertiesResults[i].value;
+                    booleanSelect.onchange = this._booleanSelectChanged(booleanSelect, i);
+
+                    propertyInput = document.createElement("input");
+                    propertyInput.value = propertiesResults[i].value;
+                    propertyInput.className = "ParametersElementInputClass";
+                    this.parametersContainer.appendChild(propertyInput);
 
-                        // Configure event
-                        propertyInput.onkeyup = this._propertyInputChanged(propertyInput, i);
+                    // Configure event
+                    propertyInput.onkeyup = this._propertyInputChanged(propertyInput, i);
+
+                    if (properties[i].text === "value") {
+                        propertyPathSelect.onchange = this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, propertyPathOptionalSelect, booleanSelect, propertyInput, propertyPathIndice);
+                    }
+
+                    if (isBoolean) {
+                        this._viewer.utils.setElementVisible(booleanSelect, true);
+                        this._viewer.utils.setElementVisible(propertyInput, false);
+                    }
+                    else {
+                        this._viewer.utils.setElementVisible(booleanSelect, false);
+                        this._viewer.utils.setElementVisible(propertyInput, true);
                     }
                 }
             }
@@ -276,7 +308,8 @@
         * @param indice: the properties indice in action.properties
         */
         private _propertyPathSelectChanged(targetParameterSelect: HTMLSelectElement, propertyPathSelect: HTMLSelectElement,
-            additionalPropertyPathSelect: HTMLSelectElement, indice: number): (event: Event) => void
+            additionalPropertyPathSelect: HTMLSelectElement, booleanSelect: HTMLSelectElement, propertyInput: HTMLInputElement,
+            indice: number): (event: Event) => void
         {
             return (event: Event) => {
                 if (propertyPathSelect.options.length === 0) {
@@ -290,10 +323,35 @@
                             propertyPathSelect.options.add(option);
                         }
                     }
-                    
+
                 } else {
                     // Set property
                     this._action.propertiesResults[indice].value = propertyPathSelect.value;
+
+                    if (booleanSelect !== null && propertyInput !== null) {
+                        var object = this._getObjectFromType(targetParameterSelect.value);
+                        var isBoolean = false;
+
+                        if (object !== null) {
+                            var property = this._action.propertiesResults[indice].value.split(".");
+
+                            for (var j = 0; j < property.length; j++) {
+                                object = object[property[j]];
+                                if (j === property.length - 1) {
+                                    isBoolean = isBoolean || typeof object === "boolean";
+                                }
+                            }
+                        }
+
+                        if (isBoolean) {
+                            this._viewer.utils.setElementVisible(booleanSelect, true);
+                            this._viewer.utils.setElementVisible(propertyInput, false);
+                        }
+                        else {
+                            this._viewer.utils.setElementVisible(booleanSelect, false);
+                            this._viewer.utils.setElementVisible(propertyInput, true);
+                        }
+                    }
                 }
 
                 // Configure addition property
@@ -395,9 +453,19 @@
                         option.value = options[i].targetType;
                         targetParameterSelect.options.add(option);
                     }
+
+                    targetParameterSelect.value = this._action.propertiesResults[indice].targetType;
                 } else {
                     this._action.propertiesResults[indice].targetType = targetParameterSelect.value;
-                    this._action.propertiesResults[indice].value = "";
+
+                    var names = this._getListFromType(targetParameterSelect.value);
+
+                    if (names !== null && names.length > 0) {
+                        this._action.propertiesResults[indice].value = names[0];
+                    }
+                    else {
+                        this._action.propertiesResults[indice].value = "";
+                    }
 
                     if (propertyPathSelect !== null) {
                         this._action.propertiesResults[indice + 1].value = ""; // propertyPath
@@ -415,12 +483,13 @@
                         targetParameterNameSelect.options.add(option);
                     }
                 }
+                targetParameterNameSelect.value = this._action.propertiesResults[indice].value;
 
                 // Clear property path
                 if (propertyPathSelect !== null) {
                     propertyPathSelect.options.length = 0;
                     additionalPropertyPathSelect.options.length = 0;
-                    this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, indice + 1)(null);
+                    this._propertyPathSelectChanged(targetParameterSelect, propertyPathSelect, additionalPropertyPathSelect, null, null, indice + 1)(null);
                 }
 
                 this._sortList(targetParameterNameSelect);
@@ -477,21 +546,39 @@
             return null;
         }
 
+        public _getListFromType(type: string): string[] {
+            if (type === "MeshProperties" || type === "Mesh") {
+                return SceneElements.MESHES;
+            }
+            if (type === "LightProperties" || type === "Light") {
+                return SceneElements.LIGHTS;
+            }
+            if (type === "CameraProperties" || type === "Camera") {
+                return SceneElements.CAMERAS;
+            }
+
+            return null;
+        }
+
         /*
         * Returns the object in function of the given type
         * @param type: the target type
         */
         public _getObjectFromType(type: string): any {
             if (type === "MeshProperties" || type === "Mesh") {
+                this._currentObject = SceneElements.MESH;
                 return SceneElements.MESH;
             }
             if (type === "LightProperties" || type === "Light") {
+                this._currentObject = SceneElements.LIGHT;
                 return SceneElements.LIGHT;
             }
             if (type === "CameraProperties" || type === "Camera") {
+                this._currentObject = SceneElements.CAMERA;
                 return SceneElements.CAMERA;
             }
             if (type === "SceneProperties" || type === "Scene") {
+                this._currentObject = SceneElements.SCENE;
                 return SceneElements.SCENE;
             }
 

+ 1 - 0
Tools/ActionsBuilder/actionsbuilder.viewer.ts

@@ -94,6 +94,7 @@
 
             // Finish
             this.parameters.parametersHelpElement.textContent = Viewer._DEFAULT_INFO_MESSAGE;
+            this.onResize(null);
         }
 
         /*