summaryrefslogtreecommitdiff
path: root/Game
diff options
context:
space:
mode:
authorDaniel Weipert <git@mail.dweipert.de>2024-11-03 14:10:07 +0100
committerDaniel Weipert <git@mail.dweipert.de>2024-11-03 14:10:07 +0100
commit84365b6f901a9c0251a9f724a8d9f81a3787e97d (patch)
tree401e2bf99e6573d1d069f5044e7448067cdfb384 /Game
parenta43499efa6c228cea3633f9661f3ff09127bd82d (diff)
next commit
Diffstat (limited to 'Game')
-rw-r--r--Game/Lobby/Server/dbbin0 -> 16384 bytes
-rw-r--r--Game/Lobby/Server/index.php139
-rw-r--r--Game/Selection/SelectionManager.gd6
-rw-r--r--Game/Selection/selectable_area.gd8
-rw-r--r--Game/States/Build/BuilderElement.gd18
5 files changed, 162 insertions, 9 deletions
diff --git a/Game/Lobby/Server/db b/Game/Lobby/Server/db
new file mode 100644
index 0000000..9e551a0
--- /dev/null
+++ b/Game/Lobby/Server/db
Binary files differ
diff --git a/Game/Lobby/Server/index.php b/Game/Lobby/Server/index.php
new file mode 100644
index 0000000..de7d5c0
--- /dev/null
+++ b/Game/Lobby/Server/index.php
@@ -0,0 +1,139 @@
+<?php
+
+/*
+ * Routes:
+ * /host ?host&port=$port&name=$name
+ * /get-list ?get-list
+ * /join ?join=$id
+ */
+
+global $db;
+$db = new PDO('sqlite:./db', options: [
+ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
+]);
+
+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,
+ timestamp integer,
+ name text
+ );
+ SQL)
+ ->execute();
+ }
+
+ return;
+}
+
+$response = [];
+
+if (isset($_POST['host'])) {
+ $ip = filter_var($_SERVER['REMOTE_ADDR'], FILTER_VALIDATE_IP);
+
+ if ($ip === false) {
+ $response = [
+ 'success' => false,
+ 'error' => 'Invalid IP.',
+ ];
+ }
+
+ else {
+ $port = intval($_POST['port']);
+ $name = $_POST['name'];
+
+ $success = $db->prepare(<<<SQL
+ insert into games (id, ip, port, timestamp, name) values (:id, :ip, :port, :timestamp, :name)
+ SQL)
+ ->execute([
+ 'id' => md5($name . time()),
+ 'ip' => $ip,
+ 'port' => $port,
+ 'timestamp' => time(),
+ 'name' => $name,
+ ]);
+
+ $response = [
+ 'success' => $success,
+ ];
+ }
+}
+
+else if (isset($_GET['get-list'])) {
+ $statement = $db->prepare(<<<SQL
+ select id, name from games
+ SQL);
+ $statement->execute();
+ $results = $statement->fetchAll();
+
+ $list = [];
+ foreach ($results as $row) {
+ $list[] = [
+ 'id' => $row['id'],
+ 'name' => $row['name'],
+ ];
+ }
+
+ $response = [
+ 'success' => true,
+ 'data' => $list,
+ ];
+}
+
+else if (isset($_GET['join'])) {
+ $id = $_GET['join'];
+
+ $statement = $db->prepare(<<<SQL
+ select ip, port from games
+ where id = :id
+ SQL);
+ $statement->execute(['id' => $id]);
+ $result = $statement->fetch();
+
+ if ($result === false) {
+ $response = [
+ 'success' => false,
+ 'error' => 'Game not found.'
+ ];
+ http_response_code(404);
+ }
+
+ else {
+ $response = [
+ 'success' => true,
+ 'data' => [
+ 'ip' => $result['ip'],
+ 'port' => $result['port'],
+ ],
+ ];
+ }
+}
+
+else if (isset($_POST['close'])) {
+ $id = $_POST['close'];
+
+ $success = $db->prepare(<<<SQL
+ delete from games where id = :id
+ SQL)
+ ->execute([
+ 'id' => $id,
+ ]);
+
+ $response = [
+ 'success' => $success,
+ ];
+}
+
+else {
+ $response = [
+ 'success' => false,
+ 'error' => 'Route not found.'
+ ];
+ http_response_code(404);
+}
+
+header('Content-Type: application/json');
+echo json_encode($response);
diff --git a/Game/Selection/SelectionManager.gd b/Game/Selection/SelectionManager.gd
new file mode 100644
index 0000000..c58dc69
--- /dev/null
+++ b/Game/Selection/SelectionManager.gd
@@ -0,0 +1,6 @@
+class_name SelectionManager
+extends Node
+
+
+func _ready() -> void:
+ pass
diff --git a/Game/Selection/selectable_area.gd b/Game/Selection/selectable_area.gd
index b3336f1..0b3557d 100644
--- a/Game/Selection/selectable_area.gd
+++ b/Game/Selection/selectable_area.gd
@@ -3,7 +3,9 @@ extends Area2D
signal hover_enter
signal hover_exit
-signal select(event: InputEvent)
+
+signal select_primary(event: InputEvent)
+signal select_secondary(event: InputEvent)
#func _on_area_entered(_area: Area2D) -> void:
@@ -26,4 +28,6 @@ func _on_mouse_exited() -> void:
func _on_input_event(_viewport: Node, event: InputEvent, _shape_idx: int) -> void:
if event.is_action_pressed("select"):
- select.emit(event)
+ select_primary.emit(event)
+ if event.is_action_pressed("select_secondary"):
+ select_secondary.emit(event)
diff --git a/Game/States/Build/BuilderElement.gd b/Game/States/Build/BuilderElement.gd
index 8c98bdc..cc9c051 100644
--- a/Game/States/Build/BuilderElement.gd
+++ b/Game/States/Build/BuilderElement.gd
@@ -15,13 +15,17 @@ var collision_areas: Array[Area2D] = []
func _ready():
instance = element.instantiate()
- var element_sprite: Sprite2D = instance.get_node("Sprite2D")
- $Sprite2D.texture = element_sprite.texture
- $Sprite2D.region_enabled = element_sprite.region_enabled
- $Sprite2D.region_rect = element_sprite.region_rect
- $Sprite2D.scale = element_sprite.scale
- $Sprite2D.position = element_sprite.position
- $Sprite2D.scale = instance.scale
+ var element_sprite: AnimatedSprite2D = instance.get_node("AnimatedSprite2D").duplicate()
+ element_sprite.scale *= instance.scale
+ element_sprite.position *= instance.scale
+ add_child(element_sprite)
+ element_sprite.play()
+ #$Sprite2D.texture = element_sprite.sprite_frames.get_frame_texture("default", 0)
+ #$Sprite2D.region_enabled = element_sprite.region_enabled
+ #$Sprite2D.region_rect = element_sprite.region_rect
+ #$Sprite2D.scale = element_sprite.scale
+ #$Sprite2D.position = element_sprite.position
+ #$Sprite2D.scale = instance.scale
var element_collision_shape = instance.get_node("CollisionShape2D").duplicate() as CollisionShape2D
collision_shape = element_collision_shape.shape