Broke everything but the multiplayer lobby

This commit is contained in:
2023-06-07 00:13:37 +10:00
parent 73f8bddae3
commit 1fe252cc01
53 changed files with 1262 additions and 623 deletions

View File

@ -0,0 +1,2 @@
class_name BotController
extends PlayerController

View File

@ -0,0 +1,48 @@
class_name DraftState
extends State
func confirm_draft():
if player.selected_for_draft.size() != player.draft_limit:
return
match(player.draft):
player.DraftType.HIRE_WORKER, player.DraftType.STARTING_HAND:
for card in player.selected_for_draft:
player.add_to_hand(card)
player.workers.append(card)
player.shown_for_draft.remove_at(player.shown_for_draft.find(card))
for card in player.shown_for_draft:
card.position = Vector2(9999, 9999)
player.board.discard_worker(card)
match(fsm.history[-1]):
fsm.FSMState.SETUP, fsm.FSMState.MANAGEMENT:
fsm.change_state(fsm.FSMState.MANAGEMENT)
player.draft_completed.emit()
func cancel_draft():
match(player.draft):
player.DraftType.HIRE_WORKER, player.DraftType.STARTING_HAND:
for card in player.shown_for_draft:
card.visible = false
card.set_process(false)
player.board.discard_worker(player.board.search_and_draw_worker(card))
match(fsm.history[-1]):
fsm.FSMState.SETUP, fsm.FSMState.MANAGEMENT:
fsm.change_state(fsm.FSMState.MANAGEMENT)
player.draft_completed.emit()
func enter():
self.visible = true
$Label.text = "Choose " + str(player.draft_limit) + " cards"
match(player.draft):
player.DraftType.HIRE_WORKER:
$CancelDraft.visible = true
player.DraftType.STARTING_HAND:
$CancelDraft.visible = false
func exit():
self.visible = false

View File

@ -0,0 +1,49 @@
class_name HoldingClientState
extends State
func _ready():
player = get_parent().get_parent().get_parent() as Player
fsm = get_parent().get_parent() as StateMachine
func assign_task_to_worker():
player.client_assignment = player.active_workers.find(player.selected_worker)
if player.active_clients[player.client_assignment] != null:
return
player.current_client.slide_to_position(player.selected_worker.position.x - 100, player.selected_worker.position.y - 100, 0.0, 0.3)
player.current_client.show_time_selector()
await player.current_client.time_slots_selected
player.payout = 0
player.payout += player.current_client.turns_left * 2
for service in player.current_client.services:
if player.selected_worker.services.has(service):
player.payout += Data.service_prices[service]
$Payout.text = "$" + str(player.payout)
$EndTurn.visible = true
func move_to_poor_discard(_button):
player.current_client.slide_to_position(player.pile_poor.position.x, player.pile_poor.position.y, 0.0, 0.2)
player.client_assignment = -1
$EndTurn.visible = true
player.payout = 0
$Payout.text = ""
func enter():
self.visible = true
$Payout.text = ""
player.current_client = player.shift_deck.pop_back()
player.current_client.position = Vector2(494, -414)
player.current_client.visible = true
player.current_client.z_index = 1
player.current_client.slide_to_position($PreviewTask.position.x, $PreviewTask.position.y, 0.0, 0.3)
player.task_drawn = true
player.pile_draw.disabled = true
player.pile_poor.disabled = false
player.clients_left = str(player.shift_deck.size())
func exit():
self.visible = false

View File

@ -0,0 +1,14 @@
class_name HoldingWorkerState
extends State
func _ready():
player = get_parent().get_parent().get_parent() as Player
fsm = get_parent().get_parent() as StateMachine
func enter():
self.visible = true
func exit():
self.visible = false

View File

@ -0,0 +1,3 @@
class_name HumanController
extends PlayerController

View File

@ -0,0 +1,38 @@
class_name ManagementState
extends State
func _on_hire_button_pressed():
if player.money >= player.hire_costs[player.workers.size()]:
player.money -= player.hire_costs[player.workers.size()]
$Money.text = "$" + str(player.money)
player.draft = player.DraftType.HIRE_WORKER
player.draft_workers(3, 1)
await player.draft_completed
$HireWorkerButton.text = "Hire Worker: $" + str(player.hire_costs[player.workers.size()])
func _on_start_round_pressed() -> void:
player
fsm.change_state(fsm.FSMState.SHIFT)
func enter():
self.visible = true
for worker in player.active_workers:
if worker != null:
worker.decrease_stress(worker.stress)
$RoundCounter.text = "Round: " + str(player.board.round_num)
$RosterButton/CollisionShape2D.disabled = false
player.hand_showing = true
player.selected_worker = null
player.camera.position.y = 0
#TODO: Figure out what this loop is for
for x in player.hand.size():
player.hand[x].in_hand = true
player.process_discard_decks()
func exit():
self.visible = false
$RosterButton/CollisionShape2D.disabled = true

View File

@ -0,0 +1,2 @@
class_name PlayerController
extends Node

View File

@ -0,0 +1,12 @@
class_name SetupState
extends State
func enter():
self.visible = true
player.draft = player.DraftType.STARTING_HAND
player.draft_workers(4, 2)
func exit():
self.visible = false

View File

@ -0,0 +1,56 @@
class_name ShiftState
extends State
func enter():
player.pad_shift_deck()
self.visible = true
$TurnCounter.text = "Turn: " + str(player.board.turn_num)
player.camera.position.y = 0
for x in player.hand.size():
player.hand[x].in_hand = true
if player.hand_hidden == false:
player.hand_hiding = true
player.pile_draw.disabled = false
player.task_drawn = false
player.clients_left.text = str(player.shift_deck.size())
player.money += player.payout
player.payout = 0
if player.client_assignment != null and player.current_client != null:
player.active_clients[player.client_assignment] = player.current_client
if player.active_workers[player.client_assignment].increase_stress(player.current_client.initial_stress):
player.worker_exceeded_capacity(player.client_assignment)
player.client_assignment = -1
player.current_client = null
elif player.client_assignment == -1 and player.current_client != null:
player.poor_discard.append(player.current_client)
player.current_client = null
$Money.text = "$" + str(player.money)
player.pile_poor.disabled = true
#Pretty sure these are done in the right order even though it looks the wrong way around
for x in player.active_workers.size():
if player.active_workers[x] != null and player.active_clients[x] == null:
player.active_workers[x].decrease_stress(1)
if player.active_workers[x] != null and player.active_clients[x] != null:
if player.active_workers[x].increase_stress(1):
player.worker_exceeded_capacity(x)
player.active_clients[x].turns_left -= 1
player.active_clients[x].update_counter()
if player.active_clients[x].turns_left == 0:
player.evaluate_task_success(x)
var tasks_done = true
for client in player.active_clients:
if client != null:
tasks_done = false
if player.shift_deck.size() == 0:
if tasks_done:
player.round_completed = true
#enter_management_overview_state()
else:
$HoldingClient/EndTurn.visible = true
player.pile_draw.disabled = true
func exit():
self.visible = false

View File

@ -0,0 +1,17 @@
class_name State
extends Node2D
@export var player : Player
@export var fsm : StateMachine
func _ready() -> void:
player = get_parent().get_parent() as Player
fsm = get_parent() as StateMachine
func enter():
pass
func exit():
pass

View File

@ -0,0 +1,29 @@
class_name StateMachine
extends Node
enum FSMState {DRAFT, SETUP, MANAGEMENT, WORKER, H_WORKER, SHIFT, H_CLIENT}
@export var state_nodes : Array[State] = []
var state : FSMState
var history : Array[FSMState] = []
func _ready() -> void:
#TODO: Bug in 4.0.3.stable requires this
state_nodes.append($Draft)
state_nodes.append($Setup)
state_nodes.append($Management)
state_nodes.append($Worker)
state_nodes.append($Worker/HoldingWorker)
state_nodes.append($Shift)
state_nodes.append($Shift/HoldingClient)
func change_state(new_state : FSMState) -> void:
history.append(state)
state = new_state
state_nodes[history[-1]].exit()
state_nodes[state].enter()

View File

@ -0,0 +1,18 @@
class_name WorkerState
extends State
func enter():
self.visible = true
player.selected_worker = null
$ReturnButton/CollisionShape2D.disabled = false
player.camera.position.y = 640
for x in player.hand.size():
player.hand[x].in_hand = false
player.hand[x].slide_to_position(player.roster_positions[x].position.x, player.roster_positions[x].position.y, 0.0, 0.2)
func exit():
self.visible = false
$ReturnButton/CollisionShape2D.disabled = true