index.js 2.5 KB

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