mirror of
https://github.com/danbulant/programovani-kostky
synced 2026-07-05 11:00:54 +00:00
working base
This commit is contained in:
parent
4ee102e00b
commit
0ce5a5cda7
4 changed files with 45 additions and 13 deletions
32
main.gd
32
main.gd
|
|
@ -3,7 +3,9 @@ extends Node3D
|
||||||
@onready var dice1: Dice = $dice1
|
@onready var dice1: Dice = $dice1
|
||||||
@onready var dice2: Dice = $dice2
|
@onready var dice2: Dice = $dice2
|
||||||
@onready var camera: Camera3D = $Camera3D
|
@onready var camera: Camera3D = $Camera3D
|
||||||
@onready var camera_start: Marker3D = $CameraPositionDefault
|
@onready var camera_starting: Marker3D = $CameraPositionStarting
|
||||||
|
@onready var camera_prethrow: Marker3D = $CameraPositionPrethrow
|
||||||
|
@onready var camera_target: Marker3D = $CameraPositionTarget
|
||||||
@onready var ui: Ui = $Ui
|
@onready var ui: Ui = $Ui
|
||||||
|
|
||||||
enum GameState {
|
enum GameState {
|
||||||
|
|
@ -14,27 +16,37 @@ enum GameState {
|
||||||
}
|
}
|
||||||
|
|
||||||
var state: GameState = GameState.START
|
var state: GameState = GameState.START
|
||||||
|
var camera_transition := 0.
|
||||||
|
var camera_speed := 1.5
|
||||||
|
var first_throw := true
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
pass
|
ui.connect("roll_pressed", throw_dice)
|
||||||
|
|
||||||
|
func _physics_process(delta: float) -> void:
|
||||||
|
camera_transition += delta * camera_speed
|
||||||
|
camera_transition = min(camera_transition, 1.)
|
||||||
|
if state == GameState.THROWING_START or state == GameState.THROWING:
|
||||||
|
camera.transform = ( camera_starting if first_throw else camera_target).transform.interpolate_with(camera_prethrow.transform, camera_transition)
|
||||||
|
elif state == GameState.THROWN:
|
||||||
|
camera.transform = camera_prethrow.transform.interpolate_with(camera_target.transform, camera_transition)
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
|
||||||
if (!dice1.can_be_thrown() or !dice2.can_be_thrown()) and state == GameState.THROWING_START:
|
if (!dice1.can_be_thrown() or !dice2.can_be_thrown()) and state == GameState.THROWING_START:
|
||||||
state = GameState.THROWING
|
state = GameState.THROWING
|
||||||
if dice1.can_be_thrown() and dice2.can_be_thrown() and state == GameState.THROWING:
|
if dice1.can_be_thrown() and dice2.can_be_thrown() and state == GameState.THROWING:
|
||||||
state = GameState.THROWN
|
state = GameState.THROWN
|
||||||
var avg_position = (dice1.global_transform.origin + dice2.global_transform.origin) / 2
|
var avg_position = (dice1.global_transform.origin + dice2.global_transform.origin) / 2
|
||||||
var diff = dice1.global_position - dice2.global_position
|
var diff = dice1.global_position - dice2.global_position
|
||||||
camera.global_position = avg_position + Vector3.UP * (diff.length())
|
camera_target.global_position = avg_position + Vector3.UP * max(diff.length(), 0.1)
|
||||||
camera.look_at(avg_position, Vector3.FORWARD)
|
camera_target.look_at(avg_position, Vector3.FORWARD)
|
||||||
|
camera_transition = 0.
|
||||||
|
first_throw = false
|
||||||
|
|
||||||
|
ui.set_current_throw_value([dice1.get_value(), dice2.get_value()])
|
||||||
|
|
||||||
func throw_dice() -> void:
|
func throw_dice() -> void:
|
||||||
if dice1.can_be_thrown() and dice2.can_be_thrown():
|
if dice1.can_be_thrown() and dice2.can_be_thrown():
|
||||||
dice1.random_throw()
|
dice1.random_throw()
|
||||||
dice2.random_throw()
|
dice2.random_throw()
|
||||||
state = GameState.THROWING_START
|
state = GameState.THROWING_START
|
||||||
reset_camera()
|
camera_transition = 0.
|
||||||
|
|
||||||
func reset_camera() -> void:
|
|
||||||
camera.global_transform.origin = camera_start.global_transform.origin
|
|
||||||
camera.global_transform.basis = camera_start.global_transform.basis
|
|
||||||
|
|
|
||||||
|
|
@ -116,9 +116,14 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.323323, 0.972071)
|
||||||
current = true
|
current = true
|
||||||
near = 0.003
|
near = 0.003
|
||||||
|
|
||||||
[node name="CameraPositionDefault" type="Marker3D" parent="."]
|
[node name="CameraPositionStarting" type="Marker3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.323323, 0.972071)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.323323, 0.972071)
|
||||||
|
|
||||||
|
[node name="CameraPositionPrethrow" type="Marker3D" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 1, 0)
|
||||||
|
|
||||||
|
[node name="CameraPositionTarget" type="Marker3D" parent="."]
|
||||||
|
|
||||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
environment = SubResource("Environment_rm3d5")
|
environment = SubResource("Environment_rm3d5")
|
||||||
camera_attributes = SubResource("CameraAttributesPractical_i6kyw")
|
camera_attributes = SubResource("CameraAttributesPractical_i6kyw")
|
||||||
|
|
|
||||||
8
ui.gd
8
ui.gd
|
|
@ -1,8 +1,12 @@
|
||||||
extends Control
|
extends Control
|
||||||
|
|
||||||
class_name Ui
|
class_name Ui
|
||||||
|
|
||||||
signal roll_pressed
|
signal roll_pressed
|
||||||
|
|
||||||
func _on_roll_button_pressed() -> void:
|
func _on_roll_button_pressed() -> void:
|
||||||
roll_pressed.emit()
|
roll_pressed.emit()
|
||||||
|
|
||||||
|
@onready var current_throw_value = $current_throw_value
|
||||||
|
|
||||||
|
func set_current_throw_value(value: Array[int]) -> void:
|
||||||
|
current_throw_value.set_text(str(value))
|
||||||
|
pass
|
||||||
11
ui.tscn
11
ui.tscn
|
|
@ -36,4 +36,15 @@ tooltip_text = "Click or press space to roll dice"
|
||||||
shortcut = SubResource("Shortcut_0osx3")
|
shortcut = SubResource("Shortcut_0osx3")
|
||||||
text = "Roll"
|
text = "Roll"
|
||||||
|
|
||||||
|
[node name="current_throw_value" type="RichTextLabel" parent="."]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = 2
|
||||||
|
anchor_top = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_left = 10.0
|
||||||
|
offset_top = -29.0
|
||||||
|
offset_right = 51.0
|
||||||
|
grow_vertical = 0
|
||||||
|
text = "0, 0"
|
||||||
|
|
||||||
[connection signal="pressed" from="roll button" to="." method="_on_roll_button_pressed"]
|
[connection signal="pressed" from="roll button" to="." method="_on_roll_button_pressed"]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue