aboutsummaryrefslogtreecommitdiffstats
path: root/godot/scenes/Die.gd
blob: 1cbb9a0f18cdc2e66b0ccc25b6ee0fe703c07358 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
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)