neowarsaw/scenes/create_player/new_character.gd

134 lines
2.9 KiB
GDScript3
Raw Permalink 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-11 19:31:26 +01:00
@onready var stats = $Stats
@onready var roll_button = $Top/TopMenu/Roll
@onready var quit_button = $Top/TopMenu/Quit
2026-01-26 11:39:17 +01:00
@onready var save_button = $Top/TopMenu/Save
@onready var roll_label = $Top/TopMenu/Roll2
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:
2026-01-11 19:31:26 +01:00
var stats_group = get_tree().get_nodes_in_group("stats")
2026-01-07 14:18:34 +01:00
2026-01-11 19:31:26 +01:00
for stat in stats_group:
2026-01-04 08:43:50 +01:00
stat.text = "0"
2026-01-26 11:39:17 +01:00
2026-01-11 19:31:26 +01:00
quit_button.pressed.connect(_on_button_quit_pressed)
roll_button.pressed.connect(_on_button_roll_pressed)
2026-01-26 11:39:17 +01:00
save_button.pressed.connect(_on_button_save_pressed)
print(Player.stats)
2026-01-04 08:43:50 +01:00
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-11 19:31:26 +01:00
## Metoda która zapisuje postać
func save_character():
2026-01-26 11:39:17 +01:00
var group_stats = get_tree().get_nodes_in_group("stats")
for stat in group_stats:
print(stat.text)
2026-01-11 19:31:26 +01:00
## Główna metoda do tworzenia postaci
2026-01-26 11:39:17 +01:00
func create_character():
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()
2026-01-26 11:39:17 +01:00
var roll = str(Global.rolld(10))
#var button_pressed = rola_cb.get_pressed_button()
var player: Dictionary = {}
var chum = 1
roll_label.text = roll
#match button_pressed.name:
#"SoloCB":
#chum = Chum.SOLO
#"NetrunnerCB":
#chum = Chum.NETRUNNER
#"KorpoCB":
#chum = Chum.KORPO
2026-01-04 08:43:50 +01:00
match chum:
1:
2026-01-26 11:39:17 +01:00
if not player.has("stats"):
player["stats"] = template["netrunner"]["rolls"][roll]
if not player.has("um"):
player["um"] = template["netrunner"]["um"]
2026-01-04 08:43:50 +01:00
_:
print(":(")
2026-01-05 13:36:23 +01:00
2026-01-26 11:39:17 +01:00
player["stats"]["PW"] = wylicz_pw(player)
player["stats"]["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-26 11:39:17 +01:00
stats_group[i].text = str(int(player["stats"].values()[i]))
2026-01-07 14:18:34 +01:00
var labels: Array[Label]
2026-01-11 19:31:26 +01:00
var um_place = "{name}: {value}"
2026-01-07 14:18:34 +01:00
2026-01-26 11:39:17 +01:00
for i in range(player["um"].size()):
2026-01-07 14:18:34 +01:00
var label: Label = Label.new()
2026-01-26 11:39:17 +01:00
label.name = player["um"].keys()[i]
2026-01-11 19:31:26 +01:00
label.text = um_place.format(
2026-01-26 11:39:17 +01:00
{"name": player["um"].keys()[i], "value": int(player["um"].values()[i])}
)
2026-01-07 14:18:34 +01:00
labels.append(label)
2026-01-05 13:36:23 +01:00
2026-01-26 11:39:17 +01:00
func wylicz_pw(_player) -> int:
var bc = _player["stats"]["INT"]
var sw = _player["stats"]["SW"]
2026-01-05 13:36:23 +01:00
var pw = 10 + (5 * ceil(lerp(bc, sw, 0.5)))
return pw
2026-01-26 11:39:17 +01:00
func wylicz_czl(_player) -> int:
var emp = _player["stats"]["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:
2026-01-26 11:39:17 +01:00
create_character()
2026-01-11 19:31:26 +01:00
func _on_button_quit_pressed() -> void:
get_tree().quit()
2026-01-26 11:39:17 +01:00
func _on_button_save_pressed() -> void:
save_character()