CameraControllerEditor.hx 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. package hide.comp;
  2. import hide.view.CameraController;
  3. class CameraControllerEditor extends Popup {
  4. var form_div : Element = null;
  5. var editor : SceneEditor = null;
  6. static public var controllersClasses : Array<{name: String, cl : Class<CameraControllerBase>}> = [
  7. {name: "Classic", cl: CamController},
  8. {name: "Orthographic", cl: OrthoController},
  9. {name: "FPS", cl: FPSController},
  10. {name: "Fly/6DOF", cl: FlightController},
  11. ];
  12. public function new(editor: SceneEditor, ?parent : Element, ?root : Element) {
  13. super(parent, root);
  14. this.editor = editor;
  15. popup.addClass("settings-popup");
  16. popup.append(new Element("<p>").text("Camera settings"));
  17. /*popup.width("400px");*/
  18. create();
  19. refresh();
  20. }
  21. function refresh() {
  22. var ortho =
  23. Type.getClass(editor.cameraController) == OrthoController;
  24. var fly =
  25. Type.getClass(editor.cameraController) == FPSController ||
  26. Type.getClass(editor.cameraController) == FlightController;
  27. form_div.find('[for="cam-speed"]').toggleClass("hide-grid", !fly);
  28. form_div.find('#cam-speed').parent().toggleClass("hide-grid", !fly);
  29. form_div.find('[for="zNear"]').toggleClass("hide-grid", !fly);
  30. form_div.find('#zNear').parent().toggleClass("hide-grid", !fly);
  31. form_div.find('[for="zFar"]').toggleClass("hide-grid", !fly);
  32. form_div.find('#zFar').parent().toggleClass("hide-grid", !fly);
  33. form_div.find('[for="zBoundsScale"]').toggleClass("hide-grid", !ortho);
  34. form_div.find('#zBoundsScale').parent().toggleClass("hide-grid", !ortho);
  35. }
  36. function create() {
  37. if (form_div == null)
  38. form_div = new Element("<div>").addClass("form-grid").appendTo(popup);
  39. form_div.empty();
  40. {
  41. var dd = new Element("<label for='fov'>").text("FOV").appendTo(form_div);
  42. var range = new Range(form_div, new Element("<input id='fov' type='range' min='30' max='120'>"));
  43. range.value = editor.cameraController.wantedFOV;
  44. range.onChange = function(_) {
  45. editor.cameraController.wantedFOV = range.value;
  46. };
  47. }
  48. {
  49. var dd = new Element("<label for='control-mode'>").text("Cam Controls")
  50. .attr("title", "Choose how the camera is controlled :
  51. - Legacy : Middle mouse orbits, Right mouse pans.
  52. - FPS: Middle mouse pans, Right mouse look arround. Use the arrows/ZQSD keys while holding right mouse to fly around.")
  53. .appendTo(form_div);
  54. var select = new Element("<select id='control-mode'>").appendTo(form_div);
  55. var curId = 0;
  56. for (i in 0...controllersClasses.length) {
  57. var cl = controllersClasses[i];
  58. if (cl.cl == Type.getClass(editor.cameraController))
  59. curId = i;
  60. new Element('<option value="$i">').text(cl.name).appendTo(select);
  61. }
  62. select.val(curId);
  63. select.on("change", function(_) {
  64. var id = Std.parseInt(select.val());
  65. var newClass = controllersClasses[id];
  66. if (Type.getClass(editor.cameraController) != newClass.cl) {
  67. editor.switchCamController(newClass.cl);
  68. refresh();
  69. }
  70. refresh();
  71. });
  72. }
  73. {
  74. var dd = new Element("<label for='cam-speed'>").text("Fly Speed").appendTo(form_div);
  75. var range = new Range(form_div, new Element("<input id='cam-speed' type='range' min='1' max='8' step='1'>"));
  76. var scale = 4.0;
  77. var pow_offset = 4;
  78. range.value = Math.round(Math.log(editor.cameraController.camSpeed) / Math.log(scale)) + pow_offset;
  79. range.onChange = function(_) {
  80. editor.cameraController.camSpeed = Math.pow(scale, range.value - pow_offset);
  81. };
  82. }
  83. {
  84. var dd = new Element("<label for='zNear'>").text("zNear").appendTo(form_div);
  85. var range = new ExpRange(form_div, new Element("<input id='zNear' type='range'>"));
  86. range.value = editor.cameraController.zNear;
  87. range.setMinMax(0.01,10000);
  88. range.onChange = function(_) {
  89. editor.cameraController.zNear = range.value;
  90. }
  91. }
  92. {
  93. var dd = new Element("<label for='zFar'>").text("zFar").appendTo(form_div);
  94. var range = new ExpRange(form_div, new Element("<input id='zFar' type='range'>"));
  95. range.value = editor.cameraController.zFar;
  96. range.setMinMax(0.01,10000);
  97. range.onChange = function(_) {
  98. editor.cameraController.zFar = range.value;
  99. }
  100. }
  101. {
  102. var dd = new Element("<label for='zBoundsScale'>").text("zBounds").appendTo(form_div);
  103. var range = new Range(form_div, new Element("<input id='zBoundsScale' type='range' min='0.01' max='10'>"));
  104. var ortho = Std.downcast(editor.cameraController, OrthoController);
  105. if (ortho != null) range.value = ortho.orthoZBounds;
  106. range.onChange = function(_) {
  107. var ortho = Std.downcast(editor.cameraController, OrthoController);
  108. if (ortho != null) ortho.orthoZBounds = range.value;
  109. };
  110. }
  111. }
  112. }