extends RefCounted class_name PlayerObject signal first_point_triggerd signal match_point_triggerd signal winner_triggerd signal point_given_sound signal player_point_given signal player_point_taken ## Unique id that never changes, unlike the player's position in Settings.player_array. var id: String = _generate_uuid() @export var player_name: String @export var player_score: int var is_first_point: bool = true var character: Texture = load("res://noCharacter.png") func _init(new_name: String) -> void: player_name = new_name player_score = 0 ## Returns a random version 4 UUID, e.g. "3f2b8c1e-9a4d-4e7f-b2c6-5d8e1f0a7b93". static func _generate_uuid() -> String: var bytes: PackedByteArray = Crypto.new().generate_random_bytes(16) bytes[6] = (bytes[6] & 0x0f) | 0x40 bytes[8] = (bytes[8] & 0x3f) | 0x80 var hex: String = bytes.hex_encode() return "%s-%s-%s-%s-%s" % [hex.substr(0, 8), hex.substr(8, 4), hex.substr(12, 4), hex.substr(16, 4), hex.substr(20, 12)] func add_point() -> void: if player_score < Settings.winning_score: player_score += 1 player_point_given.emit() if player_score == 1 && is_first_point: is_first_point = false first_point_triggerd.emit() elif player_score == Settings.winning_score - 1: match_point_triggerd.emit() elif player_score == Settings.winning_score: winner_triggerd.emit() else: point_given_sound.emit() func minus_point() -> void: if player_score > 0: player_score -= 1 player_point_taken.emit() if player_score == 0: is_first_point = true func reset_points() -> void: player_score = 0 is_first_point = true