add chasers

This commit is contained in:
2025-02-19 22:23:35 +09:00
parent ac49bcee0b
commit 591225996d
7 changed files with 186 additions and 16 deletions
+7 -5
View File
@@ -3,16 +3,18 @@ extends Node3D
const statsTemplate := "FPS: %d\nPing: %d ms"
var runner_scene := preload("res://scenes/runner.tscn")
var chaser_scene := preload("res://scenes/chaser.tscn")
var _ping := 0.0
@onready var _chasers_node: Node3D = %Chasers
@onready var _runners_node: Node3D = %Runners
func spawn_player(player_id) -> void:
func spawn_player(player_id: int, runner: bool) -> void:
if multiplayer.is_server():
var runner = runner_scene.instantiate()
runner.player_id = player_id
runner.name = str(player_id)
var player = runner_scene.instantiate() if runner else chaser_scene.instantiate()
player.player_id = player_id
player.name = str(player_id)
_runners_node.add_child(runner)
_runners_node.add_child(player) if runner else _chasers_node.add_child(player)
func _process(_delta: float) -> void:
if DisplayServer.get_name() == "headless":
+6 -2
View File
@@ -1,5 +1,9 @@
extends Control
func _on_join_button_pressed() -> void:
MultiplayerManager.connect_to_ip(%IpTextBox.text)
func _on_join_as_runner_button_pressed() -> void:
MultiplayerManager.connect_to_ip(true, %IpTextBox.text)
get_tree().change_scene_to_file("res://scenes/in_game.tscn")
func _on_join_as_chaser_button_pressed() -> void:
MultiplayerManager.connect_to_ip(false, %IpTextBox.text)
get_tree().change_scene_to_file("res://scenes/in_game.tscn")
+19 -4
View File
@@ -4,8 +4,10 @@ const PORT = 1280
const IP_ADDRESS = "127.0.0.1"
const MAX_CLIENTS = 5
var in_game_scene = preload("res://scenes/in_game.tscn")
var main_menu_scene = preload("res://scenes/main_menu.tscn")
var in_game_scene := preload("res://scenes/in_game.tscn")
var main_menu_scene := preload("res://scenes/main_menu.tscn")
var runner_client_selection := true
var runner_dict := {}
func _ready() -> void:
set_process(false)
@@ -23,9 +25,11 @@ func _ready() -> void:
else:
get_tree().change_scene_to_packed.call_deferred(main_menu_scene)
func connect_to_ip(ip: String = "") -> void:
func connect_to_ip(runner: bool = true, ip: String = "") -> void:
if ip.is_empty():
ip = IP_ADDRESS
runner_client_selection = runner
print("Connecting to: %s" % ip)
@@ -39,13 +43,13 @@ func connect_to_ip(ip: String = "") -> void:
func _on_connect(id: int) -> void:
print("Client ID #%s connected" % id)
get_tree().get_current_scene().spawn_player(id)
func _on_disconnect(id: int) -> void:
print("Client ID #%s disconnected" % id)
pass
func _on_connect_client() -> void:
request_is_runner.rpc_id(1, runner_client_selection)
print("[%s] Connected to server" % multiplayer.get_unique_id())
pass
@@ -56,3 +60,14 @@ func _on_disconnect_client() -> void:
func _on_server_closed_client() -> void:
print("[%s] Server closed" % multiplayer.get_unique_id())
pass
@rpc("any_peer", "call_remote", "reliable")
func request_is_runner(runner: bool) -> void:
if not multiplayer.is_server():
return
var id := multiplayer.get_remote_sender_id()
runner_dict[id] = runner
print("Runner Dict: %s" % runner_dict)
get_tree().get_current_scene().spawn_player(id, runner)