dice-rolling-simulator/Simulation.gd

71 lines
1.7 KiB
GDScript

extends Spatial
#var dice
var dices
var btn_roll
var lbl_debug
# Called when the node enters the scene tree for the first time.
func _ready():
dices = find_node("Dices")
# dice = find_node("Dice")
_init_roll_button()
_init_debug_labels()
func _init_roll_button():
btn_roll = Button.new()
btn_roll.text = "Roll"
btn_roll.connect("pressed", self, "_button_pressed")
add_child(btn_roll)
func _button_pressed():
print("applying force on dice")
for dice in dices.get_children():
if !dice.sleeping:
dice.apply_central_impulse(Vector3(0,50,0))
dice.apply_torque_impulse(Vector3(3,1,3))
func _process(_delta):
_update_debug_info()
for dice in dices.get_children():
if dice.global_transform.origin.y > 1:
dice.global_transform.origin.y = 1
## Debug
func _init_debug_labels():
lbl_debug = Label.new()
lbl_debug.text = "init"
lbl_debug.set_position(Vector2(10,50))
add_child(lbl_debug)
func _update_debug_info():
var debug_text = "Scores:\n"
var count = 1
var sum = 0
for dice in dices.get_children():
var result = _get_score_of_dice(dice)
sum += int(result)
debug_text += str("\n Dice ",count,": ",result)
count += 1
debug_text += str("\n Total Score: ",sum)
lbl_debug.text = str(debug_text)
func _get_score_of_dice(dice):
var dice_vector = dice.global_transform.basis.get_euler()
var x = stepify(dice_vector.x, 2)
var z = stepify(dice_vector.z, 2)
var current_result = ""
if x == 0 && z == 0:
current_result = "1"
elif x == 0 && z == 2:
current_result = "2"
elif x == 0 && (z == -4 || z == 4):
current_result = "3"
elif x == 0 && z == -2:
current_result = "4"
elif x == -2:
current_result = "5"
elif x == 2:
current_result = "6"
return current_result