extends RigidBody var camrot_h = 0 var camrot_v = 0 var camrot_v_locked_val = 0 var cam_v_min = -90 var cam_v_max = 90 var sensitivity = 0.5 var dice_is_moving = false var last_frame_position = Vector3(1.0,1.0,1.0) var mouse_origin = Vector2(0,0) var die_launch_force_magnitude = 0 var die_launch_force_direction = Vector3(0,0,0) var die_launch_force = Vector3(0,0,0) var die_launch_force_multiplier = 0.05 var left_pressed = false # Called when the node enters the scene tree for the first time. func _ready(): Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) $CamRoot/Horizontal/Vertical/Camera.add_exception(self) $CamRoot.set_as_toplevel(true) func _input(event): if event is InputEventMouseButton and dice_is_moving == false: if event.is_pressed() and left_pressed == false: Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) mouse_origin = event.global_position camrot_v_locked_val = camrot_v left_pressed = true else: left_pressed = false die_launch_force_magnitude = -(mouse_origin.y - event.global_position.y) die_launch_force_direction = $CamRoot/Horizontal/Vertical/Camera.get_global_transform().basis die_launch_force_direction = -die_launch_force_direction.z die_launch_force = die_launch_force_direction * die_launch_force_magnitude * die_launch_force_multiplier self.apply_central_impulse(die_launch_force) Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) if event is InputEventMouseMotion: camrot_h += -event.relative.x * sensitivity if left_pressed: camrot_v = camrot_v_locked_val else: camrot_v += -event.relative.y * sensitivity func _physics_process(delta): camrot_v = clamp(camrot_v, cam_v_min, cam_v_max) $CamRoot/Horizontal.rotation_degrees.y = camrot_h $CamRoot/Horizontal/Vertical.rotation_degrees.x = camrot_v $CamRoot.translation.x = translation.x $CamRoot.translation.y = translation.y $CamRoot.translation.z = translation.z if last_frame_position != Vector3(translation.x, translation.y, translation.x): dice_is_moving = true else: dice_is_moving = false last_frame_position = Vector3(translation.x, translation.y, translation.x)