re-refactoring of hardcoded cards into static CardLibrary

This commit is contained in:
betalars 2026-06-03 14:40:20 +02:00
parent 0e70bbda32
commit ba9d59721d
6 changed files with 40 additions and 30 deletions

View File

@ -1,10 +1,15 @@
class_name HardcodedCards extends Control class_name CardLibrary extends Control
@onready var card_prefab : PackedScene = preload("res://logic-scenes/board/card.tscn") static var card_prefab : PackedScene = preload("res://logic-scenes/board/card.tscn")
@onready var void_prefab : PackedScene = preload("res://logic-scenes/board/void_card.tscn") static var void_prefab : PackedScene = preload("res://logic-scenes/board/void_card.tscn")
@onready var note_prefab : PackedScene = preload("res://logic-scenes/board/sticky-note.tscn") static var note_prefab : PackedScene = preload("res://logic-scenes/board/sticky-note.tscn")
var source_dicts: Array[Dictionary] = [ static var source_dicts: Array[Dictionary] = [
{ # These provisionary cards are not being used in the game right now. This makes sure this is synced with [SceneReference.ids]
"c_for_a_friend": ["p_a", "p_b", []],
"c_for_the_character": ["p_c", "p_d", []],
"c_for_myself": ["p_e", "p_f", []]
},
{ {
"c_out_of_world": ["p_unique", "p_few_friends", []], "c_out_of_world": ["p_unique", "p_few_friends", []],
"c_rejection": ["p_finding_friends", "p_laughed_at", []], "c_rejection": ["p_finding_friends", "p_laughed_at", []],
@ -25,6 +30,11 @@ var source_dicts: Array[Dictionary] = [
"c_void": ["p_wet", "p_stop", []], "c_void": ["p_wet", "p_stop", []],
"c_hit": ["p_confidence", "p_vent", ["p_becoming_teacher"]] "c_hit": ["p_confidence", "p_vent", ["p_becoming_teacher"]]
}, },
{ # These provisionary cards are not being used in the game right now. This makes sure this is synced with [SceneReference.ids]
"c_growing_up_1": ["p_g", "p_h", []],
"c_growing_up_2": ["p_i", "p_j", []],
"c_growing_up_3": ["p_k", "p_l", []]
},
{ {
"c_seen": ["p_understanding_self", "p_starting_change", []], "c_seen": ["p_understanding_self", "p_starting_change", []],
"c_autistic": ["p_always_afraid", "p_in_hindsight", []], "c_autistic": ["p_always_afraid", "p_in_hindsight", []],
@ -67,13 +77,13 @@ var source_dicts: Array[Dictionary] = [
}, },
] ]
var all_ids: Dictionary[StringName, StringName] = generate_id_reference(true, true) static var all_ids: Dictionary[StringName, StringName] = generate_id_reference(true, true)
var card_ids: Dictionary[StringName, StringName] = generate_id_reference(true, false) static var card_ids: Dictionary[StringName, StringName] = generate_id_reference(true, false)
var sticky_ids: Dictionary[StringName, StringName] = generate_id_reference(false, true) static var sticky_ids: Dictionary[StringName, StringName] = generate_id_reference(false, true)
var obscure_ids: Dictionary[StringName, StringName] = generate_obscure_reference() static var obscure_ids: Dictionary[StringName, StringName] = generate_obscure_reference()
func generate_id_reference(include_cards: bool, include_sticky: bool) -> Dictionary[StringName, StringName]: static func generate_id_reference(include_cards: bool, include_sticky: bool) -> Dictionary[StringName, StringName]:
var out:Dictionary[StringName, StringName] = {} var out:Dictionary[StringName, StringName] = {}
for id in range(source_dicts.size()): for id in range(source_dicts.size()):
@ -87,7 +97,7 @@ func generate_id_reference(include_cards: bool, include_sticky: bool) -> Diction
return out return out
func generate_obscure_reference(): static func generate_obscure_reference():
var out:Dictionary[StringName, StringName] = {} var out:Dictionary[StringName, StringName] = {}
randomize() randomize()
@ -104,7 +114,7 @@ func generate_obscure_reference():
return out return out
func get_child_names_of(parent_id: StringName) -> Array[StringName]: static func get_child_names_of(parent_id: StringName) -> Array[StringName]:
var out: Array[StringName] var out: Array[StringName]
for child_name: StringName in all_ids.keys(): for child_name: StringName in all_ids.keys():
if all_ids[child_name].contains(parent_id): if all_ids[child_name].contains(parent_id):
@ -113,16 +123,16 @@ func get_child_names_of(parent_id: StringName) -> Array[StringName]:
return out return out
#FIXME: enhance typing! #FIXME: enhance typing!
func get_children_of(parent_id: StringName) -> Array: static func get_children_of(parent_id: StringName) -> Array:
return get_cards_by_name_array(get_child_names_of(parent_id))["sticky_notes"] return get_cards_by_name_array(get_child_names_of(parent_id))["sticky_notes"]
func get_obscure_name(card_name: StringName): static func get_obscure_name(card_name: StringName):
if State.obscure_logs and not OS.is_debug_build(): if State.obscure_logs and not OS.is_debug_build():
return obscure_ids[card_name] return obscure_ids[card_name]
else: else:
return card_name return card_name
func arrange(cards: Array[Card], rect: Rect2, _obstacles: Array[Area2D]) -> Array[Card]: static func arrange(cards: Array[Card], rect: Rect2, _obstacles: Array[Area2D]) -> Array[Card]:
var x:int = 0 var x:int = 0
var y:int = 0 var y:int = 0
var i:int = 0 var i:int = 0
@ -166,7 +176,7 @@ func arrange(cards: Array[Card], rect: Rect2, _obstacles: Array[Area2D]) -> Arra
return r_cards return r_cards
func is_out_of_bounds(card: Card, rect: Rect2): static func is_out_of_bounds(card: Card, rect: Rect2):
var world_boundaries: Array[Transform2D] = [ var world_boundaries: Array[Transform2D] = [
Transform2D(PI, rect.position), Transform2D(PI, rect.position),
Transform2D(PI/2, rect.position), Transform2D(PI/2, rect.position),
@ -180,7 +190,7 @@ func is_out_of_bounds(card: Card, rect: Rect2):
return true return true
return false return false
func get_cards_by_scene_id(id: int) -> Array[Card]: static func get_cards_by_scene_id(id: int) -> Array[Card]:
var output:Array[Card] var output:Array[Card]
for card_name in source_dicts[id].keys(): for card_name in source_dicts[id].keys():
@ -192,7 +202,7 @@ func get_cards_by_scene_id(id: int) -> Array[Card]:
return output return output
func _create_card(card_name: StringName) -> Card: static func _create_card(card_name: StringName) -> Card:
match card_name: match card_name:
&"c_void": return void_prefab.instantiate() as Card &"c_void": return void_prefab.instantiate() as Card
&"3.c_void": return void_prefab.instantiate() as Card &"3.c_void": return void_prefab.instantiate() as Card
@ -200,7 +210,7 @@ func _create_card(card_name: StringName) -> Card:
# used to put cards on the dev board # used to put cards on the dev board
func get_cards_by_name_array(names: Array[StringName]) -> Dictionary[String, Array]: static func get_cards_by_name_array(names: Array[StringName]) -> Dictionary[String, Array]:
var output:Dictionary[String, Array] = { var output:Dictionary[String, Array] = {
"cards": [], "cards": [],
"sticky_notes": [] "sticky_notes": []
@ -217,7 +227,7 @@ func get_cards_by_name_array(names: Array[StringName]) -> Dictionary[String, Arr
return output return output
func create_from_id(id:StringName) -> Area2D: static func create_from_id(id:StringName) -> Area2D:
var parsed: PackedStringArray = id.rsplit(".") var parsed: PackedStringArray = id.rsplit(".")
if card_ids.values().has(id): if card_ids.values().has(id):
var card := _create_card(id) var card := _create_card(id)

View File

@ -1,8 +1,8 @@
[gd_scene load_steps=2 format=3 uid="uid://dckj4hhl42v8u"] [gd_scene format=3 uid="uid://dckj4hhl42v8u"]
[ext_resource type="Script" uid="uid://dysgoaaesqjbg" path="res://dev-util/hardcoded_cards.gd" id="1_5kg6w"] [ext_resource type="Script" uid="uid://dysgoaaesqjbg" path="res://dev-util/hardcoded_cards.gd" id="1_5kg6w"]
[node name="HardcodedCards" type="PanelContainer"] [node name="HardcodedCards" type="PanelContainer" unique_id=1337833972]
process_mode = 4 process_mode = 4
visible = false visible = false
anchors_preset = 15 anchors_preset = 15

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=2 format=3 uid="uid://cnaffkv2n4gy5"] [gd_scene format=3 uid="uid://cnaffkv2n4gy5"]
[ext_resource type="Script" uid="uid://dysgoaaesqjbg" path="res://dev-util/hardcoded_cards.gd" id="1_ba1m7"] [ext_resource type="Script" uid="uid://dysgoaaesqjbg" path="res://dev-util/hardcoded_cards.gd" id="1_ba1m7"]
[node name="Node2D" type="Node2D"] [node name="Node2D" type="Node2D" unique_id=1954072042]
script = ExtResource("1_ba1m7") script = ExtResource("1_ba1m7")

View File

@ -175,7 +175,7 @@ func populate_board(names: Array[StringName]):
names = _ensure_unique(names) names = _ensure_unique(names)
var all_new:Dictionary = HardCards.get_cards_by_name_array(names) var all_new:Dictionary = CardLibrary.get_cards_by_name_array(names)
all_names.append_array(all_new.keys()) all_names.append_array(all_new.keys())
for new_card: Card in all_new["cards"]: for new_card: Card in all_new["cards"]:

View File

@ -56,7 +56,7 @@ func _populate() -> void:
print("CardBurner: Found %d cards to choose from" % card_names.size()) print("CardBurner: Found %d cards to choose from" % card_names.size())
# 2. Get card instances and shuffle them # 2. Get card instances and shuffle them
var stack : Array = HardCards.get_cards_by_name_array(card_names)["cards"] var stack : Array = CardLibrary.get_cards_by_name_array(card_names)["cards"]
stack.shuffle() stack.shuffle()
cards = [] cards = []

View File

@ -64,7 +64,7 @@ func reset():
for player in anim_players: player.play("reveal") for player in anim_players: player.play("reveal")
func fill_card_slots(id: int): func fill_card_slots(id: int):
var new_cards : Array[Card] = HardCards.get_cards_by_scene_id(id) var new_cards : Array[Card] = CardLibrary.get_cards_by_scene_id(id)
for i in range(new_cards.size()): for i in range(new_cards.size()):
$cards.get_child(i).remove_child($cards.get_child(i).get_child(1)) $cards.get_child(i).remove_child($cards.get_child(i).get_child(1))
@ -79,7 +79,7 @@ func fill_card_slots(id: int):
func fill_post_slots(): func fill_post_slots():
var sticky_notes: Array[StickyNote] = [] var sticky_notes: Array[StickyNote] = []
for card: Card in output: for card: Card in output:
sticky_notes.append_array(HardCards.get_children_of(card.card_id)) sticky_notes.append_array(CardLibrary.get_children_of(card.card_id))
for note:StickyNote in sticky_notes: for note:StickyNote in sticky_notes:
note.current_handle = self note.current_handle = self
@ -143,11 +143,11 @@ func pick(id: int) -> void:
options.erase(option) options.erase(option)
anim_players[i].play("unshuffle") anim_players[i].play("unshuffle")
anim_players.remove_at(i) anim_players.remove_at(i)
print("Removed StickyNote %s from options pool" % HardCards.get_obscure_name(option.name)) print("Removed StickyNote %s from options pool" % CardLibrary.get_obscure_name(option.name))
i += 1 i += 1
var winning_id var winning_id
print("Randomly selected card %s" % HardCards.get_obscure_name(options[1].name)) print("Randomly selected card %s" % CardLibrary.get_obscure_name(options[1].name))
if not (current_scene_id == Scenes.id.YOUTH_JUI_JUTSU and selection_state == CARDS_SELECTED): if not (current_scene_id == Scenes.id.YOUTH_JUI_JUTSU and selection_state == CARDS_SELECTED):
randomize() randomize()
winning_id = randi() % options.size() - ( 1 if selection_state == POSTS_SELECTED else 0) winning_id = randi() % options.size() - ( 1 if selection_state == POSTS_SELECTED else 0)