bordello/Scripts/workspace.gd

79 lines
1.7 KiB
GDScript

class_name Workspace
extends Node2D
signal clicked(Workspace)
var worker: Worker
var client: Client
@onready var _w_pos = $Worker.global_position
@onready var _c_pos = $Client.global_position
func add_worker(card: Worker) -> bool:
if worker != null:
return false
worker = card
worker.slide_to_position(_w_pos.x, _w_pos.y, 0, 0.2)
return true
func add_client(card: Client) -> bool:
if client != null:
return false
client = card
client.slide_to_position(_c_pos.x, _c_pos.y, 0, 0.2)
return true
func remove_client():
var c = client
client = null
return c
func evaluate_revenue() -> int:
if worker == null or client == null:
return 0
var revenue = 0
revenue += client.turns_left * 2
for service in client.services:
if worker.services.has(service):
revenue += Data.service_prices[service]
return revenue
func evaluate_match():
if worker == null or client == null:
return
var points = -1
for service in client.services:
if worker.services.has(service):
points += 1
points += client.turns_left
client.set_satisfaction(points)
func time_step(skip_ahead: bool):
if worker == null and client == null:
return null
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:
if event is InputEventMouseButton and event.pressed and worker != null:
emit_signal("clicked", self)