ComponentAttributeUI.ts 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import InspectorUtils = require("./InspectorUtils");
  2. import AttributeInfoEdit = require("./AttributeInfoEdit");
  3. class LightCascadeAttributeEdit extends AttributeInfoEdit {
  4. splitFields: Atomic.UIEditField[] = [];
  5. createEditWidget() {
  6. var panel = new Atomic.UILayout();
  7. panel.axis = Atomic.UI_AXIS_Y;
  8. panel.layoutSize = Atomic.UI_LAYOUT_SIZE_PREFERRED;
  9. panel.layoutPosition = Atomic.UI_LAYOUT_POSITION_LEFT_TOP;
  10. var lp = new Atomic.UILayoutParams();
  11. lp.width = 180;
  12. panel.layoutParams = lp;
  13. this.editWidget = panel;
  14. var _this = this;
  15. function createHandler(index, field) {
  16. return function(ev: Atomic.UIWidgetEditCompleteEvent) {
  17. for (var i in _this.editType.objects) {
  18. var o = <Atomic.Light>_this.editType.objects[i];
  19. o.setShadowCascadeParameter(this.index, Number(this.field.text));
  20. }
  21. o.scene.sendEvent("SceneEditEnd");
  22. _this.refresh();
  23. }.bind({ index: index, field: field });
  24. }
  25. var flp = new Atomic.UILayoutParams();
  26. flp.width = 60;
  27. for (var i = 0; i < 4; i++) {
  28. var field = InspectorUtils.createAttrEditField("Split " + i, panel);
  29. field.layoutParams = flp;
  30. field.subscribeToEvent(field, "UIWidgetEditComplete", createHandler(i, field));
  31. this.splitFields.push(field);
  32. }
  33. }
  34. refresh() {
  35. // Vector 4 internally
  36. for (var i = 0; i < 4; i++) {
  37. var uniform = this.editType.getUniformValue(this.attrInfo, i);
  38. var field = this.splitFields[i];
  39. if (uniform) {
  40. var object = this.editType.getFirstObject();
  41. if (object) {
  42. var value = object.getAttribute(this.attrInfo.name);
  43. field.text = parseFloat(value[i].toFixed(5)).toString();
  44. }
  45. else {
  46. field.text = "???";
  47. }
  48. }
  49. else {
  50. field.text = "--";
  51. }
  52. }
  53. }
  54. handleWidgetEvent(ev: Atomic.UIWidgetEvent): boolean {
  55. if (ev.type == Atomic.UI_EVENT_TYPE_CHANGED) {
  56. return true;
  57. }
  58. return false;
  59. }
  60. }
  61. AttributeInfoEdit.registerCustomAttr("Light", "CSM Splits", LightCascadeAttributeEdit);