index.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. //UI
  2. var gui = new dat.GUI();
  3. var options = {
  4. material: "standard",
  5. mesh: "sphere",
  6. hemisphericLight: true,
  7. pointLight: false,
  8. directionalLight: false,
  9. castShadows: false,
  10. spotLight: false,
  11. fog: false,
  12. skybox: false
  13. }
  14. var registeredUIs = {};
  15. var materialgui;
  16. window.registerRangeUI = function(material, name, minValue, maxValue, onChange, onSet) {
  17. if (!registeredUIs[material]) {
  18. registeredUIs[material] = [];
  19. }
  20. registeredUIs[material].push({
  21. name: name,
  22. minValue: minValue,
  23. maxValue: maxValue,
  24. onChange: onChange,
  25. onSet: onSet,
  26. type: "Range"
  27. });
  28. }
  29. window.setRangeValues = function(json) {
  30. for (var key in json) {
  31. if (json.hasOwnProperty(key)) {
  32. setRangeValue(key, json[key]);
  33. }
  34. }
  35. }
  36. window.setRangeValue = function(name, value) {
  37. if (!materialgui) {
  38. return;
  39. }
  40. var controllers = materialgui.__controllers;
  41. for (var i = 0; i < controllers.length; i++) {
  42. if (controllers[i].property == name) {
  43. controllers[i].setValue(value);
  44. }
  45. }
  46. }
  47. window.registerButtonUI = function(material, name, onClick) {
  48. if (!registeredUIs[material]) {
  49. registeredUIs[material] = [];
  50. }
  51. registeredUIs[material].push({
  52. name: name,
  53. onClick: onClick,
  54. type: "Button"
  55. });
  56. }
  57. var setUi = function(ui) {
  58. if (ui.type == "Range") {
  59. options[ui.name] = ui.onSet();
  60. var test = materialgui.add(options, ui.name, ui.minValue, ui.maxValue).onChange(function(value) {
  61. ui.onChange(value);
  62. });
  63. }
  64. else if (ui.type == "Button") {
  65. options[ui.name] = ui.onClick;
  66. materialgui.add(options, ui.name);
  67. }
  68. }
  69. window.enableMaterial = function(material) {
  70. if (materialgui) {
  71. materialgui.domElement.parentElement.removeChild(materialgui.domElement);
  72. materialgui = null;
  73. }
  74. if (registeredUIs[material]) {
  75. materialgui = new dat.GUI();
  76. for (var index = 0; index < registeredUIs[material].length; index++) {
  77. var ui = registeredUIs[material][index];
  78. setUi(ui);
  79. }
  80. }
  81. }