diff --git a/export_presets.cfg b/export_presets.cfg index 0e54e41..0e27be4 100644 --- a/export_presets.cfg +++ b/export_presets.cfg @@ -140,3 +140,69 @@ unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") rm -rf \"{temp_dir}\"" + +[preset.2] + +name="Windows Desktop" +platform="Windows Desktop" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="export/Project Teddy.exe" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_encryption_key="" + +[preset.2.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_script=1 +binary_format/embed_pck=false +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 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=true +application/icon="" +application/console_wrapper_icon="" +application/icon_interpolation=4 +application/file_version="" +application/product_version="" +application/company_name="" +application/product_name="" +application/file_description="" +application/copyright="" +application/trademarks="" +ssh_remote_deploy/enabled=false +ssh_remote_deploy/host="user@host_ip" +ssh_remote_deploy/port="22" +ssh_remote_deploy/extra_args_ssh="" +ssh_remote_deploy/extra_args_scp="" +ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}' +$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}' +$trigger = New-ScheduledTaskTrigger -Once -At 00:00 +$settings = New-ScheduledTaskSettingsSet +$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings +Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true +Start-ScheduledTask -TaskName godot_remote_debug +while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 } +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue" +ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue +Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue +Remove-Item -Recurse -Force '{temp_dir}'" diff --git a/objects/Bullet/Bullet.gd b/objects/Bullet/Bullet.gd index 18e6345..457185d 100644 --- a/objects/Bullet/Bullet.gd +++ b/objects/Bullet/Bullet.gd @@ -26,7 +26,7 @@ func _physics_process(delta): var playerShot = body.get_multiplayer_authority() print("Bullet hit ", playerShot) rpc("damage_player") - rpc_id(playerShot,"take_damage") + rpc_id(playerShot,"take_damage", Global.playerName) self.queue_free() elif body.is_in_group("AI"): print("Bullet hit an AI player") @@ -48,6 +48,7 @@ func damage_player(): # This can be used later to make sure the server and all o self.queue_free() @rpc("any_peer", "call_remote") -func take_damage(): +func take_damage(damager): var damage = RandomNumberGenerator.new().randf_range(7.0, 16.0) Global.playerHealth = Global.playerHealth - damage + Global.lastPersonToHitMe = damager diff --git a/scripts/HUD.gd b/scripts/HUD.gd index df7eda1..5faaf34 100644 --- a/scripts/HUD.gd +++ b/scripts/HUD.gd @@ -4,6 +4,9 @@ var roundTimer := 600.0 var minutes var seconds +var scores: Array[int] = [] +var scoresInitalized = false + func _ready(): minutes = roundTimer / 60 seconds = fmod(roundTimer, 60) @@ -15,6 +18,9 @@ func _process(delta): $Fatigue.value = Global.fatigue $Health.value = Global.playerHealth if Global.roundInSession == true and roundTimer >= 0: + if scoresInitalized == false: + scoresInitalized = true + fill_scores_with_zeros(Global.connectedPlayers.size()) $startLabel.text = "" roundTimer -= delta minutes = roundTimer / 60 @@ -22,3 +28,28 @@ func _process(delta): $timer.text = "%02d:%02d" % [minutes, seconds] if roundTimer <= 0.0: Global.HUDStartLabelText = "GAME OVER" + if Global.HUDPlayerDied: + Global.HUDPlayerDied = false + rpc("update_scores", Global.lastPersonToHitMe) + update_scores(Global.lastPersonToHitMe) + if Global.roundInSession == false: + for i in range(Global.connectedPlayers.size()): + if Global.connectedPlayers[i]: + var objectLabel = "player" + str(i) + "Label" + var numlabel = i + 1 + get_node("player" + str(numlabel) + "Label").text = Global.connectedPlayers[i] + ": " + "0" + +@rpc("any_peer", "reliable") +func update_scores(name): + for i in range(Global.connectedPlayers.size()): + if Global.connectedPlayers[i] == name: + var objectLabel = "player" + str(i) + "Label" + var numlabel = i + 1 + var currentScore = scores[i] + 1 + scores[i] += 1 + get_node("player" + str(numlabel) + "Label").text = Global.connectedPlayers[i] + ": " + str(currentScore) + +func fill_scores_with_zeros(num_of_players): + scores.resize(num_of_players) + for i in num_of_players: + scores[i] = 0 diff --git a/scripts/death.gd b/scripts/death.gd index 3b37ff5..4eec653 100644 --- a/scripts/death.gd +++ b/scripts/death.gd @@ -4,13 +4,12 @@ var deathTimer = 0 var teddyNode func _ready(): - pass + Global.playerAlive = false + if Global.roundInSession: + Global.HUDPlayerDied = true func _process(delta): - #teddyNode = get_node(Global.selfTeddy) - Global.playerAlive = false - #teddyNode.visible = false if deathTimer < 100: deathTimer = deathTimer + 10 * delta if deathTimer > 100: diff --git a/scripts/global.gd b/scripts/global.gd index a51d204..093cc9f 100644 --- a/scripts/global.gd +++ b/scripts/global.gd @@ -21,6 +21,9 @@ var teddyAuthorityID # Defined from teddy.gd after object is initalized var miniMenuResume = false # Set to true by mainmenu.gd var roundInSession = false # Goes true once the round is started in Teddy.gd var HUDStartLabelText = "" # The text displayed at the bottom of the screen of the server +var lastPersonToHitMe = 0 # Defined in the Bullet RPC +var HUDPlayerDied = false # Tells the HUD.gd script that a point should be added or deducted +var connectedPlayers = [] # Currently connected players by their name (NOT THEIR ID) func _process(delta): if godMode: diff --git a/scripts/host.gd b/scripts/host.gd index 0fe6e80..414e64b 100644 --- a/scripts/host.gd +++ b/scripts/host.gd @@ -42,6 +42,7 @@ func _on_start_button_pressed(): Networking.create_server(intPORT, intMAX) Networking.load_map(SCENE) Networking.add_player_node(1) + Global.connectedPlayers += [Global.playerName] Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) else: $mapSelected.text = "NO MAX PLAYERS SELECTED" diff --git a/scripts/networking.gd b/scripts/networking.gd index 52845fc..f85e50a 100644 --- a/scripts/networking.gd +++ b/scripts/networking.gd @@ -23,6 +23,7 @@ func create_server(port, maxPlayers): await get_tree().create_timer(0.5).timeout ## REQUIRED, THE RPC IS MADE BEFORE THE CLIENT IS FULLY CONNECTED rpc("add_newly_connected_player_character", new_peer_id) rpc_id(new_peer_id, "add_previously_connected_player_characters", connected_peers) + rpc_id(new_peer_id, "sync_names", Global.connectedPlayers) add_player_node(new_peer_id) ) @@ -57,3 +58,14 @@ func add_previously_connected_player_characters(peer_ids): @rpc func disconnect_peer(peer_id): peer_id.queue_free() + +@rpc("any_peer", "reliable") +func sync_names(connectedPlayers): + Global.connectedPlayers = connectedPlayers + rpc("sync_name_all_peers", Global.playerName) + sync_name_all_peers(Global.playerName) + +@rpc("any_peer", "reliable") +func sync_name_all_peers(name): + Global.connectedPlayers += [name] + print(Global.connectedPlayers)