index.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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.registerColorPicker = function(material, name, color, onChange, onSet) {
  17. if (!registeredUIs[material]) {
  18. registeredUIs[material] = [];
  19. }
  20. registeredUIs[material].push({
  21. name: name,
  22. color: "#ff0000",
  23. onChange: onChange,
  24. onSet: onSet,
  25. type: "Color"
  26. });
  27. };
  28. window.registerRangeUI = function(material, name, minValue, maxValue, onChange, onSet) {
  29. if (!registeredUIs[material]) {
  30. registeredUIs[material] = [];
  31. }
  32. registeredUIs[material].push({
  33. name: name,
  34. minValue: minValue,
  35. maxValue: maxValue,
  36. onChange: onChange,
  37. onSet: onSet,
  38. type: "Range"
  39. });
  40. }
  41. window.setRangeValues = function(json) {
  42. for (var key in json) {
  43. if (json.hasOwnProperty(key)) {
  44. setRangeValue(key, json[key]);
  45. }
  46. }
  47. }
  48. window.setRangeValue = function(name, value) {
  49. if (!materialgui) {
  50. return;
  51. }
  52. var controllers = materialgui.__controllers;
  53. for (var i = 0; i < controllers.length; i++) {
  54. if (controllers[i].property == name) {
  55. controllers[i].setValue(value);
  56. }
  57. }
  58. }
  59. window.registerButtonUI = function(material, name, onClick) {
  60. if (!registeredUIs[material]) {
  61. registeredUIs[material] = [];
  62. }
  63. registeredUIs[material].push({
  64. name: name,
  65. onClick: onClick,
  66. type: "Button"
  67. });
  68. }
  69. var setUi = function(ui) {
  70. if (ui.type == "Range") {
  71. options[ui.name] = ui.onSet();
  72. var test = materialgui.add(options, ui.name, ui.minValue, ui.maxValue).onChange(function(value) {
  73. ui.onChange(value);
  74. });
  75. }
  76. else if (ui.type == "Color") {
  77. options[ui.name] = ui.onSet();
  78. materialgui.addColor(options, ui.name).onChange(function (value) {
  79. ui.onChange(value);
  80. })
  81. }
  82. else if (ui.type == "Button") {
  83. options[ui.name] = ui.onClick;
  84. materialgui.add(options, ui.name);
  85. }
  86. }
  87. window.enableMaterial = function(material) {
  88. if (materialgui) {
  89. materialgui.domElement.parentElement.removeChild(materialgui.domElement);
  90. materialgui = null;
  91. }
  92. if (registeredUIs[material]) {
  93. materialgui = new dat.GUI();
  94. for (var index = 0; index < registeredUIs[material].length; index++) {
  95. var ui = registeredUIs[material][index];
  96. setUi(ui);
  97. }
  98. }
  99. }