bordello/Scripts/client_card_crafter.gd
2023-06-06 13:35:20 +10:00

193 lines
6.1 KiB
GDScript

extends Node2D
var card_scene = preload("res://Scenes/client_card.tscn")
var icon_order = [0, 1, 3, 5, 7, 8, 6, 4, 2]
var symbol_buttons : Array[TextureButton] = []
var symbol_count_labels : Array[LineEdit] = []
var card_array = []
var selected_card = 0
var card_count = 1
var CLIENT_DECK_SAVE_PATH = "user://client_deck.json"
func _ready():
#workaround for node array export bug present in Godot 4.0.3.Stable
symbol_buttons.append($"crossbutton")
symbol_buttons.append($"squarebutton")
symbol_buttons.append($"trianglebutton")
symbol_buttons.append($"crescentbutton")
symbol_buttons.append($"puppybutton")
symbol_buttons.append($"riverbutton")
symbol_buttons.append($"starbutton")
symbol_buttons.append($"chainbutton")
symbol_buttons.append($"gustbutton")
symbol_count_labels.append($"crosscount")
symbol_count_labels.append($"squarecount")
symbol_count_labels.append($"trianglecount")
symbol_count_labels.append($"crescentcount")
symbol_count_labels.append($"puppycount")
symbol_count_labels.append($"rivercount")
symbol_count_labels.append($"starcount")
symbol_count_labels.append($"chaincount")
symbol_count_labels.append($"gustcount")
load_deck()
func new_deck():
for x in card_array:
x.queue_free()
card_array = []
selected_card = 0
card_count = 1
$Control/LineEdit.text = "client " + str(card_count)
count_traits()
$card_count.text = str(selected_card) + "/" + str(card_array.size())
func save_deck():
var card_dict = {}
for card in card_array:
var array = []
array.append(card.initial_stress)
array.append_array(card.time_slots)
array.append_array(card.services)
card_dict[card.title] = array
var save_game = FileAccess.open(CLIENT_DECK_SAVE_PATH, FileAccess.WRITE)
var json_string = JSON.stringify(card_dict)
save_game.store_line(json_string)
func load_deck():
if !FileAccess.file_exists(CLIENT_DECK_SAVE_PATH):
return
new_deck()
var save_game = FileAccess.open(CLIENT_DECK_SAVE_PATH, FileAccess.READ)
var card_dict = JSON.parse_string(save_game.get_line())
for key in card_dict:
var value = card_dict[key]
var card_instance = card_scene.instantiate()
#JSON only returns floats so we have to get ints out of the dict
var bool_array = []
var int_array = []
for x in value.slice(1, 5):
bool_array.append(bool(x))
for x in value.slice(5, value.size()):
int_array.append(int(x))
card_instance.setup(key, int(value[0]), bool_array, int_array)
card_instance.position = Vector2(-927, -176)
card_instance.scale = Vector2(1.288, 1.288)
card_array.append(card_instance)
card_count += 1
if card_array.size() > 1:
card_array[selected_card].visible = false
selected_card = card_array.size() - 1
add_child(card_instance)
$Control/LineEdit.text = "task " + str(card_count)
count_traits()
$card_count.text = str(selected_card + 1) + "/" + str(card_array.size())
func select_prev():
if card_array.size() == 0:
return
card_array[selected_card].visible = false
selected_card -= 1
if selected_card < 0:
selected_card = card_array.size() - 1
card_array[selected_card].visible = true
$card_count.text = str(selected_card + 1) + "/" + str(card_array.size())
func select_next():
if card_array.size() == 0:
return
card_array[selected_card].visible = false
selected_card += 1
if selected_card >= card_array.size():
selected_card = 0
card_array[selected_card].visible = true
$card_count.text = str(selected_card + 1) + "/" + str(card_array.size())
func count_traits():
var difficulty_counts = [0, 0, 0]
var symbol_counts = [0, 0, 0, 0, 0, 0, 0, 0, 0]
for card in card_array:
match card.difficulty:
0:
difficulty_counts[0] += 1
1:
difficulty_counts[1] += 1
2:
difficulty_counts[2] += 1
for x in 10:
if x == 0:
continue
if x in card.services:
symbol_counts[x - 1] += 1
for x in symbol_count_labels.size():
symbol_count_labels[x].text = str(symbol_counts[x])
$easycount.text = str(difficulty_counts[0])
$mediumcount.text = str(difficulty_counts[1])
$hardcount.text = str(difficulty_counts[2])
func determine_card():
var card = []
card.append(int($Control/LineEdit2.text))
card.append(bool($Control/TextureButton.button_pressed))
card.append(bool($Control/TextureButton2.button_pressed))
card.append(bool($Control/TextureButton3.button_pressed))
card.append(bool($Control/TextureButton4.button_pressed))
var services = [Data.services.CIRCLE]
if $Control/ItemList.selected > 0:
services.append($Control/ItemList.selected)
if $Control/ItemList2.selected > 0:
services.append($Control/ItemList2.selected)
if $Control/ItemList3.selected > 0:
services.append($Control/ItemList3.selected)
if $Control/ItemList4.selected > 0:
services.append($Control/ItemList4.selected)
if $Control/ItemList5.selected > 0:
services.append($Control/ItemList5.selected)
if $Control/ItemList6.selected > 0:
services.append($Control/ItemList6.selected)
card.append_array(services)
return card
func delete_card():
if card_array.size() == 0:
return
card_array[selected_card].queue_free()
card_array.remove_at(selected_card)
if selected_card > 0:
selected_card -= 1
if card_array.size() > 0:
card_array[selected_card].visible = true
count_traits()
$card_count.text = str(selected_card + 1) + "/" + str(card_array.size())
func edit_card():
var card = determine_card()
if card == null:
return
card_array[selected_card].setup($Control/LineEdit.text, card[0], card.slice(1, 5), card.slice(5, card.size()))
count_traits()
func generate_card_from_buttons():
var card = determine_card()
if card == null:
return
var card_instance = card_scene.instantiate()
card_instance.setup(str($Control/LineEdit.text), card[0], card.slice(1, 5), card.slice(5, card.size()))
card_instance.position = Vector2(-926, -176)
card_instance.scale = Vector2(1.288, 1.288)
card_array.append(card_instance)
card_count += 1
if card_array.size() > 1:
card_array[selected_card].visible = false
selected_card = card_array.size() - 1
add_child(card_instance)
$Control/LineEdit.text = "task " + str(card_count)
count_traits()
$card_count.text = str(selected_card + 1) + "/" + str(card_array.size())
func _on_new_2_button_up():
get_tree().change_scene_to_file("res://Scenes/main_menu.tscn")