Push project up

This commit is contained in:
2026-08-23 12:03:58 -05:00
parent 5a3b3a9563
commit e8378cb6fb
34 changed files with 1001 additions and 1 deletions

View File

@@ -0,0 +1,67 @@
class_name ClientNetworking extends Node
var peer: ENetMultiplayerPeer
func start_client(address: String = "127.0.0.1", port: int = 8080) -> void:
if peer: return
push_warning("Client Starting... Address: ", address, " Port: ", port)
# TODO: Add throbber or other indication of connection attempt.
peer = ENetMultiplayerPeer.new()
peer.create_client(address, port)
multiplayer.multiplayer_peer = peer
multiplayer.connected_to_server.connect(client_connected_to_server)
multiplayer.server_disconnected.connect(client_disconnected_from_server)
multiplayer.connection_failed.connect(client_connection_failed_to_server)
func _wait_for_connection() -> void:
while not peer:
await get_tree().process_frame
while peer.get_connection_status() != 2:
await get_tree().process_frame
func _wait_close_connection():
close_connection()
while peer:
await get_tree().process_frame
func client_connected_to_server() -> void:
assert(false, "This method needs to be overridden...")
func client_disconnected_from_server() -> void:
assert(false, "This method needs to be overridden...")
func client_connection_failed_to_server() -> void:
assert(false, "This method needs to be overridden...")
func close_connection() -> void:
if not peer: return
push_warning("Disconnected from, server...")
unset_client()
func unset_client() -> void:
if not peer: return
if not multiplayer:
peer.close()
peer = null
return
multiplayer.connected_to_server.disconnect(client_connected_to_server)
multiplayer.connection_failed.disconnect(client_connection_failed_to_server)
multiplayer.server_disconnected.disconnect(client_disconnected_from_server)
peer.close()
peer = null

View File

@@ -0,0 +1 @@
uid://ci57tiuqsx1jp

View File

@@ -0,0 +1,12 @@
[gd_scene load_steps=3 format=3 uid="uid://dy51wny4x53f4"]
[ext_resource type="Script" uid="uid://52eithlmedm3" path="res://scripts/data/game_data.gd" id="1_hulqm"]
[ext_resource type="Script" uid="uid://bs4vblwa3u5jq" path="res://scripts/data/multiplayer_data.gd" id="4_setx2"]
[node name="data_bridge" type="Node"]
[node name="game_data" type="Node" parent="."]
script = ExtResource("1_hulqm")
[node name="multiplayer_data" type="Node" parent="."]
script = ExtResource("4_setx2")

34
scripts/data/game_data.gd Normal file
View File

@@ -0,0 +1,34 @@
class_name GameData extends Node
var client1: int
var client2: int
var player_id: String = ""
var game_address: String = "0.0.0.0"
var game_port: int = 8080
var game_mode: String = ""
enum PlayerType {
Player1,
Player2
}
func _init() -> void:
Globals.game_data = self
@rpc("authority", "reliable")
func set_game_address(address: String) -> void:
game_address = address
@rpc("authority", "reliable")
func set_game_port(port: String) -> void:
game_port = int(port)
func set_game_mode(_mode: String) -> void:
pass
func set_player_id(is_player_1: bool) -> void:
player_id = "Player 1" if is_player_1 else "Player 2"

View File

@@ -0,0 +1 @@
uid://52eithlmedm3

View File

@@ -0,0 +1,63 @@
class_name GameState extends Node
@warning_ignore_start("unused_signal")
signal update_cue_cam_position
signal balls_stopped_moving
signal white_ball_sunk
signal white_ball_needs_hard_reset
signal reload_scene
signal process_ball
signal reap_ball
@warning_ignore_restore("unused_signal")
func _init() -> void:
Globals.game_state = self
func load_game_scene(scene_str: String) -> void:
var scene = load(scene_str).instantiate()
var target = get_tree().root.get_node_or_null("shell/scene")
if not target:
target = get_tree().root.get_node("game_core/scene")
target.add_child(scene)
func set_game_scene(scene_str: String) -> void:
var scene = load(scene_str).instantiate()
var target = get_tree().root.get_node_or_null("shell/scene")
if not target:
target = get_tree().root.get_node("game_core/scene")
if "game" in scene_str:
scene.name = "game"
elif "lobby" in scene_str:
scene.name = "lobby_screen"
elif "start" in scene_str:
scene.name = "start_screen"
clear_game_scene(target)
target.add_child(scene)
func clear_game_scene(container: Node) -> void:
for child in container.get_children():
child.queue_free()
await get_tree().process_frame
func switch_active_player() -> void:
# TODO: Move away from using client ID or mask it with a map ID
if Globals.multiplayer_data.current_turn_player_id == Globals.game_data.client1:
Globals.multiplayer_data.rpc(
"set_active_player_id",
Globals.game_data.client2
)
elif Globals.multiplayer_data.current_turn_player_id == Globals.game_data.client2:
Globals.multiplayer_data.rpc(
"set_active_player_id",
Globals.game_data.client1
)

View File

@@ -0,0 +1 @@
uid://rol2c8o8q2ty

View File

@@ -0,0 +1,16 @@
class_name MultiplayerData extends Node
var is_multiplayer_active: bool = false
func _init() -> void:
Globals.multiplayer_data = self
@rpc("authority", "call_local", "reliable")
func set_multiplayer_active() -> void:
is_multiplayer_active = true
@rpc("authority", "call_local", "reliable")
func set_active_player_id(_id: int) -> void:
pass

View File

@@ -0,0 +1 @@
uid://bs4vblwa3u5jq

View File

@@ -0,0 +1,47 @@
class_name ServerNetworking extends Node
var peer: ENetMultiplayerPeer
func _ready() -> void:
pass
func start_server(address: String = "0.0.0.0", port: int = 8080) -> void:
if peer: return
push_warning("Server Starting... Address: ", address, " Port: ", port)
peer = ENetMultiplayerPeer.new()
peer.set_bind_ip(address)
var state = peer.create_server(port)
match state:
OK:
push_warning("Server Started: ", state)
multiplayer.multiplayer_peer = peer
multiplayer.peer_connected.connect(server_client_connected)
multiplayer.peer_disconnected.connect(server_client_disconnected)
ERR_ALREADY_IN_USE:
peer.close()
peer = null
start_server(address, port)
ERR_CANT_CREATE:
push_warning("Couldn't create server...")
func close_connection() -> void:
push_warning("Server Closed...")
multiplayer.peer_connected.disconnect(server_client_connected)
multiplayer.peer_disconnected.disconnect(server_client_disconnected)
peer.close()
peer = null
func server_client_connected(_id: int) -> void:
assert(false, "This method needs to be overridden...")
func server_client_disconnected(_id: int) -> void:
assert(false, "This method needs to be overridden...")

View File

@@ -0,0 +1 @@
uid://bgnr36m8qvbx3