summaryrefslogtreecommitdiff
path: root/Game
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2025-06-27 16:51:18 +0200
committerDaniel Weipert <git@mail.dweipert.de>2025-06-27 16:51:18 +0200
commit76d1ec723b6f6f68a512f27607749f3ff885f385 (patch)
tree36cee159d2e7bc7dc6df76de3e8fe20e3658ae8d /Game
parent0b1fd02d3cb080effe29e00f14773994d87e2e27 (diff)
managers + various changesHEADmain
Diffstat (limited to 'Game')
-rw-r--r--Game/Client.gd6
-rw-r--r--Game/Lobby/Server/index.php186
-rw-r--r--Game/Network.gd28
-rw-r--r--Game/Selection/selection_rectangle.gd2
-rw-r--r--Game/States/Build/StateBuild.gd4
-rw-r--r--Game/States/Default/StateDefault.gd5
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