neowarsaw/scenes/create_player/new_character/new_character.gd

120 lines
2.6 KiB
GDScript3
Raw Normal View History

2026-01-04 08:43:50 +01:00
extends Control
## Grupa przycisków typu checkbox która umożliwia
## wybór tylko jednej opcji
2026-01-05 13:36:23 +01:00
@export var rola_cb: ButtonGroup
@export var metody_cb: ButtonGroup
2026-01-04 08:43:50 +01:00
2026-01-05 13:36:23 +01:00
@onready var netrunner_cb = get_node("Rola/NetrunnerCB")
2026-01-04 08:43:50 +01:00
@onready var button_roll = $"../../Top/TopMenu/ButtonRoll"
2026-01-07 14:18:34 +01:00
@onready var um_container = get_node("Umiejetnosci/GridContainer")
2026-01-04 08:43:50 +01:00
2026-01-07 14:18:34 +01:00
enum Chum {
SOLO,
NETRUNNER,
KORPO,
2026-01-04 08:43:50 +01:00
}
2026-01-07 14:18:34 +01:00
## Słownik zawierający szablon dla klasy netrunner
var netrunner: Dictionary = {}
# Plik z szablonem
var NETRUNNER_TEMPLATE = "res://assets/templates/netrunner.json"
2026-01-04 08:43:50 +01:00
func _ready() -> void:
var stats = get_tree().get_nodes_in_group("stats")
2026-01-07 14:18:34 +01:00
2026-01-04 08:43:50 +01:00
button_roll.disabled = true
for stat in stats:
stat.text = "0"
func _draw() -> void:
var stats_scene = get_node("Stats")
if stats_scene.is_visible_in_tree():
button_roll.disabled = !button_roll.disabled
2026-01-07 14:18:34 +01:00
## Metoda która wczytuje plik json zawierający szablony
## dla odpowiednich klas
func load_template():
var file = FileAccess.open(NETRUNNER_TEMPLATE, FileAccess.READ)
2026-01-04 08:43:50 +01:00
2026-01-07 14:18:34 +01:00
var json = file.get_as_text()
var json_object = JSON.new()
2026-01-04 08:43:50 +01:00
2026-01-07 14:18:34 +01:00
json_object.parse(json)
netrunner = json_object.data
return netrunner
2026-01-04 08:43:50 +01:00
2026-01-07 14:18:34 +01:00
func create_character(roll, chum: int) -> void:
2026-01-04 08:43:50 +01:00
var stats_group = get_tree().get_nodes_in_group("stats")
2026-01-07 14:18:34 +01:00
var template = load_template()
var um
var player
2026-01-04 08:43:50 +01:00
match chum:
1:
2026-01-07 14:18:34 +01:00
player = template["netrunner"]["rolls"][roll]
um = template["netrunner"]["umiejetnosci"]
2026-01-04 08:43:50 +01:00
_:
print(":(")
2026-01-05 13:36:23 +01:00
2026-01-07 14:18:34 +01:00
player["PW"] = wylicz_pw(player)
player["CZL"] = wylicz_czl(player)
2026-01-05 13:36:23 +01:00
2026-01-04 08:43:50 +01:00
if chum <= 1:
for i in range(stats_group.size()):
2026-01-07 14:18:34 +01:00
stats_group[i].text = str(int(player.values()[i]))
var labels: Array[Label]
var um_place = "%s: %s"
for i in range(um.size()):
var label: Label = Label.new()
label.name = um.keys()[i]
label.text = um_place % [(um.keys()[i]), str(int(um.values()[i]))]
labels.append(label)
for label in labels:
um_container.add_child(label)
2026-01-05 13:36:23 +01:00
if chum == Chum.NETRUNNER:
2026-01-07 14:18:34 +01:00
print("[%s] PW: %d, CZŁ: %d" % ["Netrunner", player["PW"], player["CZL"]])
2026-01-05 13:36:23 +01:00
2026-01-07 14:18:34 +01:00
func wylicz_pw(player) -> int:
var bc = player["INT"]
var sw = player["SW"]
2026-01-05 13:36:23 +01:00
var pw = 10 + (5 * ceil(lerp(bc, sw, 0.5)))
return pw
2026-01-07 14:18:34 +01:00
func wylicz_czl(player) -> int:
var emp = player["EMP"]
2026-01-05 13:36:23 +01:00
var czl = emp * 10
return czl
2026-01-07 14:18:34 +01:00
func _on_button_roll_pressed() -> void:
var roll = str(Global.rolld(10))
var button_pressed = rola_cb.get_pressed_button()
var chum
match button_pressed.name:
"SoloCB":
chum = Chum.SOLO
"NetrunnerCB":
chum = Chum.NETRUNNER
"KorpoCB":
chum = Chum.KORPO
print("Rzut wynosi: %s a klasa to %s" % [roll, chum])
create_character(roll, chum)