aboutsummaryrefslogtreecommitdiffstats
path: root/godot/scenes/Die.gd
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--godot/scenes/Die.gd130
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