Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # camera_control_gui.gd. Modified by Tobias Lindström to make the GUI not appear
- # Licensed under the MIT License.
- # Copyright (c) 2018 Jaccomo Lorenz (Maujoe)
- extends Control
- # Constant Gui Settings
- #*******************************************************************************
- const GUI_POS = Vector2(10, 10)
- const GUI_SIZE = Vector2(200, 0)
- const DRAGGABLE = true
- const CUSTOM_BACKGROUND = false
- const BACKGROUND_COLOR = Color(0.15, 0.17, 0.23, 0.75)
- const MAX_SPEED = 50
- #*******************************************************************************
- var camera
- var shortcut
- var node_list
- var privot
- var panel
- var mouse_over = false
- var mouse_pressed = false
- func _init(camera, shortcut):
- self.camera = camera
- self.shortcut = shortcut
- func _ready():
- if camera.enabled:
- set_process_input(true)
- # Create Gui
- # panel = PanelContainer.new()
- # panel.set_begin(GUI_POS)
- # panel.set_custom_minimum_size(GUI_SIZE)
- #
- # if CUSTOM_BACKGROUND:
- # var style = StyleBoxFlat.new()
- # style.set_bg_color(BACKGROUND_COLOR)
- # style.set_expand_margin_all(5)
- # panel.add_stylebox_override("panel", style)
- #
- # var container = VBoxContainer.new()
- #
- # var lbl_mouse = Label.new()
- # lbl_mouse.set_text("Mousemode")
- #
- # var mouse = OptionButton.new()
- # mouse.add_item("Visible")
- # mouse.add_item("Hidden")
- # mouse.add_item("Captured")
- # mouse.add_item("Confined")
- # mouse.select(camera.mouse_mode)
- # mouse.connect("item_selected",self,"_on_opt_mouse_item_selected")
- # Mouselook
- var mouselook = CheckButton.new()
- mouselook.set_text("Mouselook")
- mouselook.set_toggle_mode(true)
- mouselook.set_pressed(camera.mouselook)
- mouselook.connect("toggled",self,"_on_btn_mouselook_toggled")
- var lbl_sensitivity = Label.new()
- lbl_sensitivity.set_text("Sensitivity")
- var sensitivity = HScrollBar.new()
- sensitivity.set_max(1)
- sensitivity.set_value(camera.sensitivity)
- sensitivity.connect("value_changed",self,"_on_hsb_sensitivity_value_changed")
- var lbl_smoothless = Label.new()
- lbl_smoothless.set_text("Smoothness")
- var smoothness = HScrollBar.new()
- smoothness.set_max(0.999)
- smoothness.set_min(0.5)
- smoothness.set_value(camera.smoothness)
- smoothness.connect("value_changed",self,"_on_hsb_smoothness_value_changed")
- var lbl_privot = Label.new()
- lbl_privot.set_text("Privot")
- privot = OptionButton.new()
- privot.set_text("Privot")
- _update_privots(privot)
- privot.connect("item_selected",self,"_on_opt_privot_item_selected")
- privot.connect("pressed",self,"_on_opt_privot_pressed")
- var btn_rot_privot = CheckButton.new()
- btn_rot_privot.set_text("Rotate Privot")
- btn_rot_privot.set_toggle_mode(true)
- btn_rot_privot.set_pressed(camera.rotate_privot)
- btn_rot_privot.connect("toggled",self,"_on_btn_rot_privot_toggled")
- var lbl_distance = Label.new()
- lbl_distance.set_text("Distance")
- var distance = SpinBox.new()
- distance.set_value(camera.distance)
- distance.connect("value_changed",self,"_on_box_distance_value_changed")
- var lbl_yaw = Label.new()
- lbl_yaw.set_text("Yaw Limit")
- var yaw = SpinBox.new()
- yaw.set_max(360)
- yaw.set_value(camera.yaw_limit)
- yaw.connect("value_changed",self,"_on_box_yaw_value_changed")
- var lbl_pitch = Label.new()
- lbl_pitch.set_text("Pitch Limit")
- var pitch = SpinBox.new()
- pitch.set_max(360)
- pitch.set_value(camera.pitch_limit)
- pitch.connect("value_changed",self,"_on_box_pitch_value_changed")
- var collisions = CheckButton.new()
- collisions.set_text("Collisions")
- collisions.set_toggle_mode(true)
- collisions.set_pressed(camera.collisions)
- collisions.connect("toggled",self,"_on_btn_collisions_toggled")
- # Movement
- var lbl_movement = Label.new()
- lbl_movement.set_text("Movement")
- var movement = CheckButton.new()
- movement.set_pressed(camera.movement)
- movement.connect("toggled",self,"_on_btn_movement_toggled")
- var lbl_speed = Label.new()
- lbl_speed.set_text("Max Speed")
- var speed = HScrollBar.new()
- speed.set_max(MAX_SPEED)
- speed.set_value(camera.max_speed.x)
- speed.connect("value_changed",self,"_on_hsb_speed_value_changed")
- var lbl_acceleration = Label.new()
- lbl_acceleration.set_text("Acceleration")
- var acceleration = HScrollBar.new()
- acceleration.set_max(1.0)
- acceleration.set_value(camera.acceleration)
- acceleration.connect("value_changed", self, "_in_hsb_acceleration_value_changed")
- var lbl_deceleration = Label.new()
- lbl_deceleration.set_text("Deceleration")
- var deceleration = HScrollBar.new()
- deceleration.set_max(1.0)
- deceleration.set_value(camera.deceleration)
- deceleration.connect("value_changed", self, "_in_hsb_deceleration_value_changed")
- # add_child(panel)
- # panel.add_child(container)
- # container.add_child(lbl_mouse)
- # container.add_child(mouse)
- # container.add_child(mouselook)
- # container.add_child(lbl_sensitivity)
- # container.add_child(sensitivity)
- # container.add_child(lbl_smoothless)
- # container.add_child(smoothness)
- # container.add_child(lbl_privot)
- # container.add_child(privot)
- # container.add_child(btn_rot_privot)
- # container.add_child(lbl_distance)
- # container.add_child(distance)
- # container.add_child(lbl_yaw)
- # container.add_child(yaw)
- # container.add_child(lbl_pitch)
- # container.add_child(pitch)
- # container.add_child(collisions)
- # container.add_child(lbl_movement)
- # container.add_child(movement)
- # container.add_child(lbl_speed)
- # container.add_child(speed)
- # container.add_child(lbl_acceleration)
- # container.add_child(acceleration)
- # container.add_child(lbl_deceleration)
- # container.add_child(deceleration)
- # if DRAGGABLE:
- # panel.connect("mouse_entered", self, "_panel_entered")
- # panel.connect("mouse_exited", self, "_panel_exited")
- # container.connect("mouse_entered", self, "_panel_entered")
- # container.connect("mouse_exited", self, "_panel_exited")
- self.hide()
- else:
- set_process_input(false)
- func _input(event):
- if event.is_action_pressed(shortcut):
- if camera.enabled:
- camera.enabled = false
- Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
- self.show()
- else:
- camera.enabled = true
- self.hide()
- if DRAGGABLE:
- if event is InputEventMouseButton and event.button_index == BUTTON_LEFT:
- mouse_pressed = event.pressed
- elif event is InputEventMouseMotion and mouse_over and mouse_pressed:
- panel.set_begin(panel.get_begin() + event.relative)
- func _update_privots(privot):
- privot.clear()
- privot.add_item("None")
- node_list = _get_spatials_recusiv(get_tree().get_root(), [get_name(), camera.get_name()])
- var size = node_list.size()
- for i in range(0, size):
- var node = node_list[i]
- privot.add_item(node.get_name())
- if node == camera.privot:
- privot.select(i+1)
- if not camera.privot:
- privot.select(0)
- func _get_spatials_recusiv(node, exceptions=[]):
- var list = []
- for child in node.get_children():
- if not child.get_name() in exceptions:
- if child is Spatial:
- list.append(child)
- if not child.get_children().empty():
- for subchild in _get_spatials_recusiv(child, exceptions):
- list.append(subchild)
- return list
- func _panel_entered():
- mouse_over = true
- func _panel_exited():
- mouse_over = false
- func _on_opt_mouse_item_selected(id):
- camera.mouse_mode = id
- func _on_btn_mouselook_toggled(pressed):
- camera.mouselook = pressed
- func _on_hsb_sensitivity_value_changed(value):
- camera.sensitivity = value
- func _on_hsb_smoothness_value_changed(value):
- camera.smoothness = value
- func _on_opt_privot_pressed():
- _update_privots(privot)
- func _on_opt_privot_item_selected(id):
- if id > 0:
- camera.privot = node_list[id-1]
- else:
- camera.privot = null
- privot.select(id)
- func _on_btn_rot_privot_toggled(pressed):
- camera.rotate_privot = pressed
- func _on_box_distance_value_changed(value):
- camera.distance = value
- func _on_box_yaw_value_changed(value):
- camera.yaw_limit = value
- func _on_box_pitch_value_changed(value):
- camera.pitch_limit = value
- func _on_btn_collisions_toggled(pressed):
- camera.collisions = pressed
- func _on_btn_movement_toggled(pressed):
- camera.movement = pressed
- func _on_hsb_speed_value_changed(value):
- camera.max_speed.x = value
- camera.max_speed.y = value
- camera.max_speed.z = value
- func _in_hsb_acceleration_value_changed(value):
- camera.acceleration = value
- func _in_hsb_deceleration_value_changed(value):
- camera.deceleration = value
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement