UI.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. "atomic component";
  2. /**
  3. * A new component
  4. */
  5. export default class UI extends Atomic.JSComponent {
  6. /**
  7. * Fields witihin the inspectorFields object will be exposed to the editor
  8. */
  9. inspectorFields = {
  10. };
  11. /**
  12. * Called when the component is first added to the node
  13. */
  14. start() {
  15. //creates a new scene, but doesn't load it to the player
  16. let scene = Atomic.player.loadScene("Scenes/Scene.scene");
  17. //get camera from the scene
  18. let camera = <Atomic.Camera>scene.getComponents("Camera", true)[0];
  19. //create a new UIView
  20. let view = new Atomic.UIView();
  21. // Create a UIWindow
  22. let window = new Atomic.UIWindow();
  23. // It will only have a title bar and won't be resizeable or have a close button
  24. window.settings = Atomic.UI_WINDOW_SETTINGS.UI_WINDOW_SETTINGS_TITLEBAR;
  25. window.text = "ShaderParameters";
  26. window.setSize(UI.WIDTH, UI.HEIGHT);
  27. let layout = new Atomic.UILayout();
  28. let slider = new Atomic.UISlider();
  29. slider.layoutWidth = 100;
  30. slider.setLimits(.1, 1.0);
  31. slider.value = 1;
  32. // The Scene View
  33. let sceneView = new Atomic.UISceneView();
  34. sceneView.setView(scene, camera);
  35. sceneView.autoUpdate = true;
  36. sceneView.layoutWidth = 512;
  37. sceneView.layoutHeight = 384;
  38. layout.addChild(sceneView);
  39. layout.addChild(slider);
  40. window.addChild(layout);
  41. // Add to main UI view and center
  42. view.addChild(window);
  43. window.center();
  44. let viewport = sceneView.viewport;
  45. let renderPath = viewport.renderPath;
  46. // Add a blur post process effect
  47. viewport.renderPath.append(Atomic.cache.getResource<Atomic.XMLFile>("XMLFile", "PostProcess/MyBlur.xml"));
  48. // Get the individual blur commands from MyBlur.xml
  49. let rpc = new Atomic.RenderPathCommand();
  50. let commands:Array<Atomic.RenderPathCommand> = [];
  51. for (let i = 0; i < renderPath.numCommands; i++) {
  52. renderPath.getCommand(i, rpc);
  53. if (rpc.tag == "Blur1" || rpc.tag == "Blur2" ||
  54. rpc.tag == "Blur3" || rpc.tag == "Blur4") {
  55. // store off the command index so we can update it later
  56. rpc["cmdIndex"] = i;
  57. commands.push(rpc);
  58. rpc = new Atomic.RenderPathCommand();
  59. }
  60. }
  61. this.subscribeToEvent(slider, Atomic.UIWidgetEvent((ev) => {
  62. if (ev.type == Atomic.UI_EVENT_TYPE.UI_EVENT_TYPE_CHANGED) {
  63. let value = 2.0 * slider.value;
  64. // This works, can set globally
  65. //renderPath.setShaderParameter("BlurSigma", value);
  66. // Though, for this example set per command
  67. for (let i = 0; i < commands.length; i++) {
  68. let cmd = commands[i];
  69. cmd.setShaderParameter("BlurSigma", value);
  70. // update in the renderPath
  71. renderPath.setCommand(cmd["cmdIndex"], cmd);
  72. }
  73. }
  74. }));
  75. }
  76. /**
  77. * Update called every cycle with timeStep containing the delta between calls
  78. * @param timeStep time since last call to update
  79. */
  80. update(timeStep: number) {
  81. }
  82. private static readonly WIDTH:number = 640;
  83. private static readonly HEIGHT:number = 480;
  84. }