extends RigidBody const Game = preload("res://scenes/Game.gd") 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 dragging = false var mouse_origin = Vector2(0,0) var dice_launch_force = 0 var mat var target_bounce = 1 var previous_bounciness = 0 var _game: Game = null # 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) _game = get_node("/root/Game") mat = get_physics_material_override() previous_bounciness = mat.get_bounce() ball() func _input(event): if event is InputEventKey: if event.scancode == KEY_TAB: if event.is_pressed(): _game.open_scoreboard() else: _game.close_scoreboard() if event is InputEventMouseMotion: camrot_h += -event.relative.x * sensitivity camrot_v += -event.relative.y * sensitivity if dice_is_moving == false: if event is InputEventMouseMotion and dragging: # While dragging, move the sprite with the mouse. dice_launch_force = mouse_origin.distance_to(event.global_position) camrot_v = camrot_v_locked_val elif event is InputEventMouseButton and event.button_index == BUTTON_LEFT: Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) mouse_origin = event.global_position camrot_v_locked_val = camrot_v if not dragging and event.pressed: dragging = true # Stop dragging if the button is released. elif dragging and not event.pressed: dragging = false Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) 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 if angular_velocity.length() == 0: get_upwards_side() last_frame_position = Vector3(translation.x, translation.y, translation.x) # Called every frame. 'delta' is the elapsed time since the previous frame. #func _process(delta): # pass """ BUFFS """ func get_upwards_side(): var forward = -global_transform.basis.z var up = forward.angle_to(Vector3.UP) var down = forward.angle_to(Vector3.DOWN) var left = forward.angle_to(Vector3.LEFT) var right = forward.angle_to(Vector3.RIGHT) var forw = forward.angle_to(Vector3.FORWARD) var back = forward.angle_to(Vector3.BACK) # 0 = ball, 1 = phase, 2 = bounce var dictionary = { up: 0, down: 1, left: 2, right: 0, forw: 1, back: 2 } var smallest = dictionary.keys().min() return dictionary[smallest] func extra_stroke(): _game.revoke_stroke() func bounciness(): mat.set_bounce(target_bounce) func bounciness_revert(): mat.set_bounce(previous_bounciness) func phase(): set_collision_layer_bit(2, false) func phase_revert(): set_collision_layer_bit(2, true) func ball(): $BallShape.show() $BallShape.set_process(true) $BallShape.disabled = false func ball_revert(): $BallShape.hide() $BallShape.set_process(false) $BallShape.disabled = true