bordello/Scripts/PlayerBoard.gd

83 lines
2.0 KiB
GDScript

class_name PlayerBoard
extends Node2D
signal clients_discarded(cards: Array[NodePath])
var player_info = {}
var workers = []
var roster = []
@export var poor_deck: Deck
@export var good_deck: Deck
@export var great_deck: Deck
@export var shift_deck: Deck
@export var slots: Array[Workspace] = []
@export var client_view_position: Node2D
func add_to_roster(node_paths):
var cards = []
for path in node_paths:
cards.append(get_node(path))
roster.append_array(cards)
for x in 4:
if x < roster.size():
slots[x].add_worker(roster[x])
func empty_slots() -> int:
var x = 0
for i in slots:
if i.worker == null:
x += 1
return x
func draw_client():
var card = shift_deck.draw_card()
card.slide_to_position(position.x, position.y, 0.0, 0.3)
card.turn_front()
func process_decks() -> int:
var discards = []
var points = 0
for card in poor_deck.cards:
card.turn_back()
points -= 1
for card in good_deck.cards:
card.turn_back()
points += 2
for card in great_deck.cards:
card.turn_back()
points += 5
poor_deck.shuffle()
good_deck.shuffle()
great_deck.shuffle()
for card in poor_deck.draw_cards(poor_deck.cards.size() - 1):
discards.append(card.get_path())
for card in good_deck.draw_cards(ceil(good_deck.cards.size() / 2.0)):
discards.append(card.get_path())
for card in great_deck.draw_cards(min(great_deck.cards.size(), 1)):
discards.append(card.get_path())
for card in poor_deck.draw_cards(poor_deck.cards.size()):
shift_deck.place(card)
for card in good_deck.draw_cards(good_deck.cards.size()):
shift_deck.place(card)
for card in great_deck.draw_cards(great_deck.cards.size()):
shift_deck.place(card)
clients_discarded.emit(discards)
return points
func time_step(skip_ahead: bool):
for x in 4:
var result : Client = slots[x].time_step(skip_ahead)
if result != null:
if result.satisfaction < result.medium_threshold:
poor_deck.place(result)
elif result.satisfaction < result.good_threshold:
good_deck.place(result)
elif result.satisfaction >= result.good_threshold:
great_deck.place(result)