index.js 2.9 KB

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