diff options
author | Daniel Weipert <git@mail.dweipert.de> | 2025-06-27 16:51:18 +0200 |
---|---|---|
committer | Daniel Weipert <git@mail.dweipert.de> | 2025-06-27 16:51:18 +0200 |
commit | 76d1ec723b6f6f68a512f27607749f3ff885f385 (patch) | |
tree | 36cee159d2e7bc7dc6df76de3e8fe20e3658ae8d /Game | |
parent | 0b1fd02d3cb080effe29e00f14773994d87e2e27 (diff) |
Diffstat (limited to 'Game')
-rw-r--r-- | Game/Client.gd | 6 | ||||
-rw-r--r-- | Game/Lobby/Server/index.php | 186 | ||||
-rw-r--r-- | Game/Network.gd | 28 | ||||
-rw-r--r-- | Game/Selection/selection_rectangle.gd | 2 | ||||
-rw-r--r-- | Game/States/Build/StateBuild.gd | 4 | ||||
-rw-r--r-- | Game/States/Default/StateDefault.gd | 5 |
6 files changed, 105 insertions, 126 deletions
diff --git a/Game/Client.gd b/Game/Client.gd index 0af4e9d..4eb48bb 100644 --- a/Game/Client.gd +++ b/Game/Client.gd @@ -18,8 +18,6 @@ var state: State : var current_stage: Stage -var selection: SelectionManager - var player: Player: get(): return Network.get_player(multiplayer.get_unique_id()) @@ -33,10 +31,6 @@ func _notification(what: int) -> void: func initialize_stage(stage: Stage): current_stage = stage - - if not selection: - selection = preload("res://Game/Selection/SelectionManager.tscn").instantiate() - add_child(selection) func ready_stage(_stage: Stage): pass diff --git a/Game/Lobby/Server/index.php b/Game/Lobby/Server/index.php index 1086d24..7d12195 100644 --- a/Game/Lobby/Server/index.php +++ b/Game/Lobby/Server/index.php @@ -19,18 +19,18 @@ $db = new PDO('sqlite:./' . $dbname, options: [ if (php_sapi_name() == 'cli') { if ($argv[$argc - 1] == 'init-db') { - $db->query(<<<SQL - create table if not exists games ( - id text primary key, - ip text unique, - port integer, - creation_time integer, - ping_time integer, - name text, - secret text - ); - SQL) - ->execute(); + $db->query(<<<SQL + create table if not exists games ( + id text primary key, + ip text unique, + port integer, + creation_time integer, + ping_time integer, + name text, + secret text + ); + SQL) + ->execute(); } return; @@ -42,7 +42,7 @@ $method = $_SERVER['REQUEST_METHOD']; if ($method == 'POST') { $inputPost = json_decode(file_get_contents('php://input'), true); if ($inputPost) { - $_POST = $inputPost + $_POST; + $_POST = $inputPost + $_POST; } } @@ -50,73 +50,73 @@ $response = []; if ($method == 'POST' && $url['path'] == '/host') { $ip = filter_var( - $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'], - FILTER_VALIDATE_IP + $_SERVER['HTTP_X_FORWARDED_FOR'] ?? $_SERVER['REMOTE_ADDR'], + FILTER_VALIDATE_IP ); if ($ip === false) { - $response = [ - 'success' => false, - 'error' => 'Invalid IP.', - ]; + $response = [ + 'success' => false, + 'error' => 'Invalid IP.', + ]; } else { - $port = intval($_POST['port']); - $name = $_POST['name']; - $id = md5($name . time()); - $secret = md5($id . random_bytes($port)); - - $success = $db->prepare(<<<SQL - insert or replace into games (id, ip, port, creation_time, ping_time, name, secret) values (:id, :ip, :port, :timestamp, :timestamp, :name, :secret) - SQL) - ->execute([ - 'id' => $id, - 'ip' => $ip, - 'port' => $port, - 'timestamp' => time(), - 'name' => $name, - 'secret' => $secret, - ]); - - if ($success) { - $response = [ - 'success' => $success, - 'data' => [ - 'id' => $id, - 'secret' => $secret, - ], - ]; - } else { - $response = [ - 'success' => $success, - 'error' => $db->errorInfo(), - ]; - } + $port = intval($_POST['port']); + $name = $_POST['name']; + $id = md5($name . time()); + $secret = md5($id . random_bytes($port)); + + $success = $db->prepare(<<<SQL + insert or replace into games (id, ip, port, creation_time, ping_time, name, secret) values (:id, :ip, :port, :timestamp, :timestamp, :name, :secret) + SQL) + ->execute([ + 'id' => $id, + 'ip' => $ip, + 'port' => $port, + 'timestamp' => time(), + 'name' => $name, + 'secret' => $secret, + ]); + + if ($success) { + $response = [ + 'success' => $success, + 'data' => [ + 'id' => $id, + 'secret' => $secret, + ], + ]; + } else { + $response = [ + 'success' => $success, + 'error' => $db->errorInfo(), + ]; + } } } else if ($method == 'GET' && $url['path'] == '/get-list') { $statement = $db->prepare(<<<SQL - select id, name from games - where ping_time > :comparison_time - SQL); + select id, name from games + where ping_time > :comparison_time + SQL); $statement->execute([ - 'comparison_time' => time() - $timeoutMax, + 'comparison_time' => time() - $timeoutMax, ]); $results = $statement->fetchAll(); $list = []; foreach ($results as $row) { - $list[] = [ - 'id' => $row['id'], - 'name' => $row['name'], - ]; + $list[] = [ + 'id' => $row['id'], + 'name' => $row['name'], + ]; } $response = [ - 'success' => true, - 'data' => $list, + 'success' => true, + 'data' => $list, ]; } @@ -124,30 +124,30 @@ else if ($method == 'GET' && $url['path'] == '/join') { $id = $_GET['id']; $statement = $db->prepare(<<<SQL - select ip, port from games - where id = :id - SQL); + select ip, port from games + where id = :id + SQL); $statement->execute([ - 'id' => $id, + 'id' => $id, ]); $result = $statement->fetch(); if ($result === false) { - $response = [ - 'success' => false, - 'error' => 'Game not found.' - ]; - http_response_code(404); + $response = [ + 'success' => false, + 'error' => 'Game not found.' + ]; + http_response_code(404); } else { - $response = [ - 'success' => true, - 'data' => [ - 'ip' => $result['ip'], - 'port' => $result['port'], - ], - ]; + $response = [ + 'success' => true, + 'data' => [ + 'ip' => $result['ip'], + 'port' => $result['port'], + ], + ]; } } @@ -156,15 +156,15 @@ else if ($method == 'POST' && $url['path'] == '/close') { $secret = $_POST['secret']; $success = $db->prepare(<<<SQL - delete from games where id = :id and secret = :secret - SQL) - ->execute([ - 'id' => $id, - 'secret' => $secret, - ]); + delete from games where id = :id and secret = :secret + SQL) + ->execute([ + 'id' => $id, + 'secret' => $secret, + ]); $response = [ - 'success' => $success, + 'success' => $success, ]; } @@ -173,23 +173,23 @@ else if ($method == 'POST' && $url['path'] == '/keep-alive') { $secret = $_POST['secret']; $success = $db->prepare(<<<SQL - update games set ping_time = :ping_time where id = :id and secret = :secret - SQL) - ->execute([ - 'id' => $id, - 'secret' => $secret, - 'ping_time' => time(), - ]); + update games set ping_time = :ping_time where id = :id and secret = :secret + SQL) + ->execute([ + 'id' => $id, + 'secret' => $secret, + 'ping_time' => time(), + ]); $response = [ - 'success' => $success, + 'success' => $success, ]; } else { $response = [ - 'success' => false, - 'error' => 'Route not found.' + 'success' => false, + 'error' => 'Route not found.' ]; http_response_code(404); } diff --git a/Game/Network.gd b/Game/Network.gd index 4413548..345b305 100644 --- a/Game/Network.gd +++ b/Game/Network.gd @@ -62,14 +62,6 @@ func _on_peer_connected(id: int): print(multiplayer.get_unique_id(), ": peer connected: ", id) add_to_players.rpc_id(id, inst_to_dict(Client.player)) - # TODO: check why bug and adds more players than intended - #ask_game_running.rpc_id(id) - #is_game_running.connect(func(is_running: bool): - #if not is_running: - #add_to_players.rpc_id(id, inst_to_dict(Client.player)) - #elif is_running: - #get_tree().change_scene_to_file("res://UI/Start.tscn") - #) func _on_peer_disconnected(id: int): print(multiplayer.get_unique_id(), ": peer disconnected: ", id) @@ -113,18 +105,6 @@ func remove_player(id: int): players_changed.emit() -signal is_game_running(is_running: bool) - -@rpc("any_peer") -func ask_game_running(): - var is_running = get_tree().current_scene is Stage - receive_game_running.rpc_id(multiplayer.get_remote_sender_id(), is_running) - -@rpc("any_peer") -func receive_game_running(is_running: bool): - is_game_running.emit(is_running) - - @rpc("any_peer") func add_to_players(remote_data: Dictionary): var id = multiplayer.get_remote_sender_id() @@ -152,7 +132,7 @@ func update_player(id: int, remote_data: Dictionary): players_changed.emit() -@rpc("any_peer") +@rpc("any_peer", "call_remote") func destroy_tower(remote_data: Dictionary): var data: Tower.NetworkData = dict_to_inst(remote_data) var remote_tower = Tower.from_network_data(data) @@ -163,7 +143,7 @@ func destroy_tower(remote_data: Dictionary): Client.current_stage.destroy_tower(tower) -@rpc("any_peer") +@rpc("any_peer", "call_remote") func update_tower(remote_tower_node_path: NodePath, remote_data: Dictionary): var data: Tower.NetworkData = dict_to_inst(remote_data) var tower: Tower = get_tree().current_scene.get_node_or_null(remote_tower_node_path) @@ -172,14 +152,14 @@ func update_tower(remote_tower_node_path: NodePath, remote_data: Dictionary): tower.update_with_network_data(data) -@rpc("any_peer") +@rpc("any_peer", "call_remote") func remove_unit(remote_unit_node_path: NodePath): var unit = get_tree().current_scene.get_node_or_null(remote_unit_node_path) if unit: unit.queue_free() -@rpc("any_peer") +@rpc("any_peer", "call_remote") func update_unit(remote_unit_node_path: NodePath, remote_data: Dictionary): var data: Unit.NetworkData = dict_to_inst(remote_data) var unit: Unit = get_tree().current_scene.get_node_or_null(remote_unit_node_path) diff --git a/Game/Selection/selection_rectangle.gd b/Game/Selection/selection_rectangle.gd index b643636..0b6bb22 100644 --- a/Game/Selection/selection_rectangle.gd +++ b/Game/Selection/selection_rectangle.gd @@ -47,7 +47,7 @@ func _draw(): if is_active: var rect = Rect2(Vector2.ZERO, size) draw_rect(rect, color_background) - draw_rect(rect, color_border, false, 1.25 / max(camera.zoom.x, camera.zoom.y)) + draw_rect(rect, color_border, false, 1.1 / max(camera.zoom.x, camera.zoom.y)) func _on_area_entered(area: Area2D) -> void: diff --git a/Game/States/Build/StateBuild.gd b/Game/States/Build/StateBuild.gd index 303a2b1..84bfa2c 100644 --- a/Game/States/Build/StateBuild.gd +++ b/Game/States/Build/StateBuild.gd @@ -4,11 +4,13 @@ extends State static var current_builder_element: BuilderElement +@export var selection_manager: SelectionManager + func _state_enter(): %BuildGrid.visible = true - for tower: Tower in Client.selection.get_nodes().duplicate(): + for tower: Tower in selection_manager.get_nodes().duplicate(): tower.is_selected = false diff --git a/Game/States/Default/StateDefault.gd b/Game/States/Default/StateDefault.gd index 014eb40..205fa3f 100644 --- a/Game/States/Default/StateDefault.gd +++ b/Game/States/Default/StateDefault.gd @@ -2,6 +2,9 @@ class_name StateDefault extends State +@export var selection_manager: SelectionManager + + func _state_input(event: InputEvent) -> void: if event.is_action_pressed("build_mode_start"): set_state("StateBuild") @@ -16,5 +19,5 @@ func _state_unhandled_input(event: InputEvent) -> void: if event.is_action_pressed("select"): # if not multi selecting if not event.is_double_click() and not Input.is_action_pressed("select_multiple"): - for tower: Tower in Client.selection.get_nodes().duplicate(): + for tower: Tower in selection_manager.get_nodes().duplicate(): tower.is_selected = false |