added basic hire functionality
This commit is contained in:
parent
9de8504b54
commit
73a36d20f0
@ -225,8 +225,9 @@ texture = ExtResource("4_tye4g")
|
||||
|
||||
[node name="watch" type="TextureRect" parent="."]
|
||||
visible = false
|
||||
offset_top = -136.0
|
||||
offset_right = 350.0
|
||||
offset_bottom = 250.0
|
||||
offset_bottom = 114.0
|
||||
texture = ExtResource("9_uqpfx")
|
||||
|
||||
[node name="time1" type="TextureRect" parent="watch"]
|
||||
|
@ -236,8 +236,9 @@ layout_mode = 2
|
||||
layout_mode = 0
|
||||
offset_right = 40.0
|
||||
offset_bottom = 23.0
|
||||
text = "0 / 100 Reputation"
|
||||
text = "0 / 60 Reputation"
|
||||
|
||||
[connection signal="pressed" from="CanvasLayer/UI/Confirm" to="." method="_on_confirm_pressed"]
|
||||
[connection signal="pressed" from="CanvasLayer/UI/HBoxContainer/LobbyReadyButton" to="." method="_on_lobby_ready_button_pressed"]
|
||||
[connection signal="pressed" from="CanvasLayer/UI/Hire" to="." method="_on_hire_pressed"]
|
||||
[connection signal="text_submitted" from="CanvasLayer/UI/VBoxContainer/LineEdit" to="." method="_on_line_edit_text_submitted"]
|
||||
|
@ -5,13 +5,14 @@
|
||||
[ext_resource type="PackedScene" uid="uid://y2i3u6n1oowh" path="res://Scenes/deck.tscn" id="3_ypq4b"]
|
||||
[ext_resource type="PackedScene" uid="uid://baoec8cqmedf6" path="res://Scenes/worker_slot.tscn" id="4_o73ea"]
|
||||
|
||||
[node name="PlayerBoard" type="Node2D" node_paths=PackedStringArray("poor_deck", "good_deck", "great_deck", "shift_deck", "slots")]
|
||||
[node name="PlayerBoard" type="Node2D" node_paths=PackedStringArray("poor_deck", "good_deck", "great_deck", "shift_deck", "slots", "client_view_position")]
|
||||
script = ExtResource("1_dj0oi")
|
||||
poor_deck = NodePath("PoorDeck")
|
||||
good_deck = NodePath("GoodDeck")
|
||||
great_deck = NodePath("GreatDeck")
|
||||
shift_deck = NodePath("ShiftDeck")
|
||||
slots = [NodePath("Slot1"), NodePath("Slot2"), NodePath("Slot3"), NodePath("Slot4")]
|
||||
client_view_position = NodePath("ClientViewPosition")
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("2_rx76r")
|
||||
@ -43,3 +44,6 @@ position = Vector2(255, 235)
|
||||
|
||||
[node name="Slot4" parent="." instance=ExtResource("4_o73ea")]
|
||||
position = Vector2(785, 235)
|
||||
|
||||
[node name="ClientViewPosition" type="Node2D" parent="."]
|
||||
position = Vector2(296, -194)
|
||||
|
@ -1,15 +1,18 @@
|
||||
class_name PlayerBoard
|
||||
extends Node2D
|
||||
|
||||
signal clients_discarded(cards: Array[NodePath])
|
||||
|
||||
var player_info = {}
|
||||
var workers = []
|
||||
var roster = []
|
||||
signal clients_discarded(cards: Array[NodePath])
|
||||
|
||||
@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):
|
||||
@ -22,6 +25,14 @@ func add_to_roster(node_paths):
|
||||
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)
|
||||
|
@ -39,10 +39,6 @@ func setup(_title, _initial_stress, _time_slots, _services):
|
||||
for x in time_button_sprites.size():
|
||||
if time_slots[x] == true:
|
||||
time_button_sprites[x].visible = true
|
||||
$front/Slice1.visible = false
|
||||
$front/Slice2.visible = false
|
||||
$front/Slice3.visible = false
|
||||
$front/Slice4.visible = false
|
||||
if time_slots[0] == true:
|
||||
$front/Slice1.visible = true
|
||||
if time_slots[1] == true:
|
||||
@ -58,7 +54,7 @@ func setup(_title, _initial_stress, _time_slots, _services):
|
||||
continue
|
||||
icon_list[x - 1].set_service(services[x])
|
||||
icon_list[x - 1].visible = true
|
||||
good_threshold = 10 - (5 - services.size())
|
||||
good_threshold = 10 - (6 - services.size())
|
||||
medium_threshold = 4
|
||||
if time_slots[3] == false:
|
||||
good_threshold -= 1
|
||||
|
@ -36,6 +36,7 @@ var _player_scene = preload("res://Scenes/player_board.tscn")
|
||||
var _human_scene = preload("res://Scenes/human_player.tscn")
|
||||
var _bot_scene = preload("res://Scenes/bot_player.tscn")
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_load_workers()
|
||||
_load_clients()
|
||||
@ -107,6 +108,7 @@ func add_player(id: int, username: String, type: PlayerType) -> void:
|
||||
controller.chat_message_submitted.connect(message)
|
||||
controller.workers_discarded.connect(discard_workers)
|
||||
controller.workers_kept.connect(board.add_to_roster)
|
||||
controller.hire_pressed.connect(hire)
|
||||
var player_info = {}
|
||||
player_info["id"] = id
|
||||
player_info["username"] = username
|
||||
@ -214,7 +216,6 @@ func start_round():
|
||||
player.rpc("update_ready_label", readied_players.size(), players.size())
|
||||
for player in players:
|
||||
rpc("draft_clients", player.player_info["username"])
|
||||
#await clients_drafted
|
||||
rpc("start_turn")
|
||||
|
||||
|
||||
@ -242,6 +243,11 @@ func send_client_order(node_paths):
|
||||
shuffle_sync_recieved.emit()
|
||||
|
||||
|
||||
func hire(player):
|
||||
if is_multiplayer_authority():
|
||||
rpc("draft_workers", player, 4, 1)
|
||||
|
||||
|
||||
@rpc("call_local", "reliable")
|
||||
func draft_workers(player, draw_amount, pick_amount):
|
||||
var cards = []
|
||||
@ -266,9 +272,9 @@ func draft_clients(player):
|
||||
if player_controller.player_info["username"] == player:
|
||||
controller = player_controller
|
||||
var cards_to_draw = 4
|
||||
if controller.reputation_points >= 30:
|
||||
if controller.reputation_points >= 20:
|
||||
cards_to_draw += 4
|
||||
if controller.reputation_points >= 60:
|
||||
if controller.reputation_points >= 40:
|
||||
cards_to_draw += 4
|
||||
for x in cards_to_draw - controller.board.shift_deck.cards.size():
|
||||
if client_deck.cards.size() == 0:
|
||||
|
@ -99,6 +99,8 @@ func turn_away_client():
|
||||
|
||||
func start_turn():
|
||||
super()
|
||||
$CanvasLayer/UI/Hire.visible = false
|
||||
$CanvasLayer/UI/Label.visible = false
|
||||
|
||||
|
||||
@rpc("call_local", "reliable")
|
||||
@ -109,10 +111,12 @@ func end_turn():
|
||||
|
||||
func end_of_round():
|
||||
super()
|
||||
$CanvasLayer/UI/Reputation.text = str(reputation_points) + " / 100 Reputation"
|
||||
$CanvasLayer/UI/Reputation.text = str(reputation_points) + " / 60 Reputation"
|
||||
game_started = 1
|
||||
ready_button.visible = true
|
||||
ready_label.visible = true
|
||||
$CanvasLayer/UI/Hire.visible = true
|
||||
$CanvasLayer/UI/Label.visible = true
|
||||
|
||||
|
||||
func update_money():
|
||||
@ -141,3 +145,9 @@ func select_workspace(workspace):
|
||||
func confirm_draft():
|
||||
super()
|
||||
ready_button.visible = true
|
||||
|
||||
|
||||
func _on_hire_pressed() -> void:
|
||||
print("hire button pushed")
|
||||
rpc("attempt_hire")
|
||||
update_money()
|
||||
|
@ -5,6 +5,7 @@ signal workers_discarded
|
||||
signal workers_kept
|
||||
signal turn_finished
|
||||
signal round_finished(int)
|
||||
signal hire_pressed(String)
|
||||
|
||||
var player_info
|
||||
@export var hand_position: Node2D
|
||||
@ -58,7 +59,7 @@ func networked_select_card(add, card_path):
|
||||
func select_workspace(workspace):
|
||||
if not is_multiplayer_authority():
|
||||
return false
|
||||
if current_client == null or workspace.worker == null:
|
||||
if current_client == null or workspace.worker == null or workspace.worker.stress >= workspace.worker.capacity:
|
||||
return false
|
||||
if workspace == current_workspace or workspace.client != null:
|
||||
return false
|
||||
@ -113,7 +114,10 @@ func confirm_draft():
|
||||
|
||||
func start_turn():
|
||||
current_client = board.shift_deck.draw_card()
|
||||
current_client.slide_to_position(board.global_position.x, board.global_position.y, 0.0, 0.3)
|
||||
var pos: Vector2
|
||||
pos.x = board.client_view_position.global_position.x
|
||||
pos.y = board.client_view_position.global_position.y
|
||||
current_client.slide_to_position(pos.x, pos.y, 0.0, 0.3)
|
||||
current_client.turn_front()
|
||||
|
||||
|
||||
@ -137,3 +141,12 @@ func end_turn():
|
||||
if board.shift_deck.cards.size() == 0:
|
||||
end_of_round()
|
||||
turn_finished.emit()
|
||||
|
||||
|
||||
@rpc("call_local", "reliable")
|
||||
func attempt_hire():
|
||||
if board.empty_slots() < 1 or money < 50:
|
||||
return
|
||||
print("attempt hire didnt fail")
|
||||
money -= 50
|
||||
hire_pressed.emit(player_info["username"])
|
||||
|
@ -1,21 +1,23 @@
|
||||
class_name Worker
|
||||
extends Card
|
||||
|
||||
signal card_clicked(card)
|
||||
|
||||
var title = "New Card"
|
||||
var max_supers = 2
|
||||
var capacity = 8
|
||||
var stress = 0
|
||||
signal card_clicked(card)
|
||||
var in_hand = false
|
||||
var hand_ratio
|
||||
var hand_position = Vector2(0, 0)
|
||||
var hovered = false
|
||||
|
||||
@export var spread_curve : Curve
|
||||
@export var height_curve : Curve
|
||||
@export var rotation_curve : Curve
|
||||
@export var hand_width : float
|
||||
@export var hand_height : float
|
||||
@export var hand_rotation : float
|
||||
var in_hand = false
|
||||
var hand_ratio
|
||||
var hand_position = Vector2(0, 0)
|
||||
var hovered = false
|
||||
|
||||
|
||||
func _process(delta):
|
||||
if sliding:
|
||||
@ -29,6 +31,7 @@ func _process(delta):
|
||||
position.x = hand_position.x + spread_curve.sample(hand_ratio) * (hand_width + (hand_width * 0.2))
|
||||
rotation = rotation_curve.sample(hand_ratio) * (hand_rotation + (hand_rotation * 0.2))
|
||||
|
||||
|
||||
func get_icon(x):
|
||||
var y = 32
|
||||
if x > 8:
|
||||
@ -37,6 +40,7 @@ func get_icon(x):
|
||||
y += x * 32
|
||||
return y
|
||||
|
||||
|
||||
func setup(_title, _capacity, _services):
|
||||
if _title != "":
|
||||
title = _title
|
||||
@ -91,11 +95,13 @@ func _on_area_2d_input_event(_viewport, event, _shape_idx):
|
||||
if event is InputEventMouseButton and event.pressed:
|
||||
emit_signal("card_clicked", self)
|
||||
|
||||
|
||||
func increase_stress(amount) -> bool:
|
||||
stress += amount
|
||||
$Label.text = str(stress)
|
||||
return stress > capacity
|
||||
|
||||
|
||||
func decrease_stress(amount):
|
||||
stress -= amount
|
||||
if stress < 0:
|
||||
|
@ -54,16 +54,23 @@ func evaluate_match():
|
||||
|
||||
|
||||
func time_step(skip_ahead: bool):
|
||||
if worker == null or client == null:
|
||||
if worker == null and client == null:
|
||||
return null
|
||||
client.turns_left -= 1
|
||||
elif worker != null and client == null:
|
||||
worker.decrease_stress(1)
|
||||
else:
|
||||
if skip_ahead:
|
||||
worker.decrease_stress(client.turns_left)
|
||||
client.turns_left = 0
|
||||
else:
|
||||
worker.increase_stress(1)
|
||||
client.turns_left -= 1
|
||||
client.update_counter()
|
||||
if client.turns_left > 0:
|
||||
return null
|
||||
else:
|
||||
return remove_client()
|
||||
return null
|
||||
|
||||
|
||||
func _on_area2d_input_event(_viewport: Node, event: InputEvent, _shape_idx: int) -> void:
|
||||
|
@ -13,14 +13,13 @@ encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
script_encryption_key=""
|
||||
|
||||
[preset.0.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_script=0
|
||||
binary_format/embed_pck=false
|
||||
debug/export_console_wrapper=1
|
||||
binary_format/embed_pck=true
|
||||
texture_format/bptc=true
|
||||
texture_format/s3tc=true
|
||||
texture_format/etc=false
|
||||
@ -54,23 +53,19 @@ encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
script_encryption_key=""
|
||||
|
||||
[preset.1.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_script=1
|
||||
binary_format/embed_pck=false
|
||||
debug/export_console_wrapper=1
|
||||
binary_format/embed_pck=true
|
||||
texture_format/bptc=true
|
||||
texture_format/s3tc=true
|
||||
texture_format/etc=false
|
||||
texture_format/etc2=false
|
||||
binary_format/architecture="x86_64"
|
||||
codesign/enable=false
|
||||
codesign/identity_type=0
|
||||
codesign/identity=""
|
||||
codesign/password=""
|
||||
codesign/timestamp=true
|
||||
codesign/timestamp_server_url=""
|
||||
codesign/digest_algorithm=1
|
||||
@ -82,8 +77,8 @@ application/console_wrapper_icon=""
|
||||
application/icon_interpolation=4
|
||||
application/file_version=""
|
||||
application/product_version=""
|
||||
application/company_name=""
|
||||
application/product_name=""
|
||||
application/company_name="soweli jan pona"
|
||||
application/product_name="bordello"
|
||||
application/file_description=""
|
||||
application/copyright=""
|
||||
application/trademarks=""
|
||||
@ -120,14 +115,14 @@ encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
encrypt_pck=false
|
||||
encrypt_directory=false
|
||||
script_encryption_key=""
|
||||
|
||||
[preset.2.options]
|
||||
|
||||
export/distribution_type=1
|
||||
binary_format/architecture="universal"
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
debug/export_console_script=1
|
||||
debug/export_console_wrapper=1
|
||||
application/icon=""
|
||||
application/icon_interpolation=4
|
||||
application/bundle_identifier="com.sowelijanpona.bordello"
|
||||
@ -137,11 +132,18 @@ application/short_version="1.0"
|
||||
application/version="1.0"
|
||||
application/copyright=""
|
||||
application/copyright_localized={}
|
||||
application/min_macos_version="10.12"
|
||||
display/high_res=true
|
||||
xcode/platform_build="14C18"
|
||||
xcode/sdk_version="13.1"
|
||||
xcode/sdk_build="22C55"
|
||||
xcode/sdk_name="macosx13.1"
|
||||
xcode/xcode_version="1420"
|
||||
xcode/xcode_build="14C18"
|
||||
codesign/codesign=1
|
||||
codesign/installer_identity=""
|
||||
codesign/apple_team_id=""
|
||||
codesign/identity=""
|
||||
codesign/certificate_file=""
|
||||
codesign/certificate_password=""
|
||||
codesign/entitlements/custom_file=""
|
||||
codesign/entitlements/allow_jit_code_execution=false
|
||||
codesign/entitlements/allow_unsigned_executable_memory=false
|
||||
@ -167,12 +169,6 @@ codesign/entitlements/app_sandbox/files_movies=0
|
||||
codesign/entitlements/app_sandbox/helper_executables=[]
|
||||
codesign/custom_options=PackedStringArray()
|
||||
notarization/notarization=0
|
||||
notarization/apple_id_name=""
|
||||
notarization/apple_id_password=""
|
||||
notarization/apple_team_id=""
|
||||
notarization/api_uuid=""
|
||||
notarization/api_key=""
|
||||
notarization/api_key_id=""
|
||||
privacy/microphone_usage_description=""
|
||||
privacy/microphone_usage_description_localized={}
|
||||
privacy/camera_usage_description=""
|
||||
|
Loading…
x
Reference in New Issue
Block a user