diff options
Diffstat (limited to '')
-rw-r--r-- | godot/scenes/Die.gd | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/godot/scenes/Die.gd b/godot/scenes/Die.gd new file mode 100644 index 0000000..21a408e --- /dev/null +++ b/godot/scenes/Die.gd @@ -0,0 +1,130 @@ +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 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 + +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() + +func _input(event): + + if event is InputEventKey: + if event.scancode == KEY_TAB: + if event.is_pressed(): + _game.open_scoreboard() + else: + _game.close_scoreboard() + return + + 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 + + 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(): + return 0 + + +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 |