Broke everything but the multiplayer lobby
This commit is contained in:
2
Scripts/PlayerStateMachine/bot_controller.gd
Normal file
2
Scripts/PlayerStateMachine/bot_controller.gd
Normal file
@ -0,0 +1,2 @@
|
||||
class_name BotController
|
||||
extends PlayerController
|
48
Scripts/PlayerStateMachine/draft_state.gd
Normal file
48
Scripts/PlayerStateMachine/draft_state.gd
Normal 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
|
||||
|
49
Scripts/PlayerStateMachine/holding_client_state.gd
Normal file
49
Scripts/PlayerStateMachine/holding_client_state.gd
Normal 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
|
||||
|
14
Scripts/PlayerStateMachine/holding_worker_state.gd
Normal file
14
Scripts/PlayerStateMachine/holding_worker_state.gd
Normal 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
|
||||
|
3
Scripts/PlayerStateMachine/human_controller.gd
Normal file
3
Scripts/PlayerStateMachine/human_controller.gd
Normal file
@ -0,0 +1,3 @@
|
||||
class_name HumanController
|
||||
extends PlayerController
|
||||
|
38
Scripts/PlayerStateMachine/management_state.gd
Normal file
38
Scripts/PlayerStateMachine/management_state.gd
Normal 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
|
||||
|
2
Scripts/PlayerStateMachine/player_controller.gd
Normal file
2
Scripts/PlayerStateMachine/player_controller.gd
Normal file
@ -0,0 +1,2 @@
|
||||
class_name PlayerController
|
||||
extends Node
|
12
Scripts/PlayerStateMachine/setup_state.gd
Normal file
12
Scripts/PlayerStateMachine/setup_state.gd
Normal 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
|
56
Scripts/PlayerStateMachine/shift_state.gd
Normal file
56
Scripts/PlayerStateMachine/shift_state.gd
Normal 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
|
||||
|
17
Scripts/PlayerStateMachine/state.gd
Normal file
17
Scripts/PlayerStateMachine/state.gd
Normal 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
|
29
Scripts/PlayerStateMachine/state_machine.gd
Normal file
29
Scripts/PlayerStateMachine/state_machine.gd
Normal 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()
|
||||
|
||||
|
18
Scripts/PlayerStateMachine/worker_state.gd
Normal file
18
Scripts/PlayerStateMachine/worker_state.gd
Normal 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
|
||||
|
Reference in New Issue
Block a user