Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| fff9a3eb11 | |||
| 963b70f674 | |||
| 3a4c76cd67 | |||
| 0fcb151f87 | |||
| 340a176e55 | |||
| a762c2d8ad | |||
| cac56adbdb | |||
| 5e9627e453 | |||
| 819c678201 | |||
| 8a52846c2d | |||
| b089f5bf26 | |||
| a498a3a69f | |||
| ebab6b6f13 |
@@ -11,12 +11,14 @@ jobs:
|
|||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- preset: linux
|
|
||||||
export_file: cadastery.x86_64
|
|
||||||
- preset: windows
|
- preset: windows
|
||||||
export_file: cadastery.exe
|
export_file: cadastery.exe
|
||||||
|
- preset: linux
|
||||||
|
export_file: cadastery.x86_64
|
||||||
- preset: mac
|
- preset: mac
|
||||||
export_file: cadastery.zip
|
export_file: cadastery.zip
|
||||||
|
- preset: server
|
||||||
|
export_file: cadastery-server.x86_64
|
||||||
permissions: write-all
|
permissions: write-all
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|||||||
30
Dockerfile
Normal file
30
Dockerfile
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
FROM fedora:latest
|
||||||
|
|
||||||
|
ARG GODOT_VERSION="4.3"
|
||||||
|
ARG SERVER_PORT=10567
|
||||||
|
ENV GODOT_FILE_NAME="Godot_v${GODOT_VERSION}-stable_linux.x86_64"
|
||||||
|
|
||||||
|
ENV GODOT_GAME_NAME="cadastery-server"
|
||||||
|
|
||||||
|
RUN dnf update -y
|
||||||
|
RUN dnf install -y wget
|
||||||
|
RUN dnf install -y unzip
|
||||||
|
RUN dnf install -y wayland-devel
|
||||||
|
RUN dnf install -y fontconfig
|
||||||
|
|
||||||
|
ADD https://github.com/godotengine/godot/releases/download/${GODOT_VERSION}-stable//${GODOT_FILE_NAME}.zip ./
|
||||||
|
RUN mkdir -p ~/.cache \
|
||||||
|
&& mkdir -p ~/.config/godot \
|
||||||
|
&& unzip ${GODOT_FILE_NAME}.zip \
|
||||||
|
&& mv ${GODOT_FILE_NAME} /usr/local/bin/godot \
|
||||||
|
&& rm -f ${GODOT_FILE_NAME}.zip
|
||||||
|
|
||||||
|
WORKDIR /godotapp
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
RUN godot --headless --export-pack "server" /godotapp/${GODOT_GAME_NAME}.pck
|
||||||
|
|
||||||
|
EXPOSE ${SERVER_PORT}/udp
|
||||||
|
|
||||||
|
SHELL ["/bin/bash", "-c"]
|
||||||
|
ENTRYPOINT godot --main-pack ${GODOT_GAME_NAME}.pck
|
||||||
14
docker-compose.yaml
Normal file
14
docker-compose.yaml
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
services:
|
||||||
|
cadastery:
|
||||||
|
build: .
|
||||||
|
ports:
|
||||||
|
- '10567:10567'
|
||||||
|
- '10567:10567/udp'
|
||||||
|
volumes:
|
||||||
|
- cadastery-server-userdata:/root/.local/share/Cadastery
|
||||||
|
tty: true
|
||||||
|
container_name: cadastery-server
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
cadastery-server-userdata:
|
||||||
|
driver: local
|
||||||
@@ -11,7 +11,7 @@ config_version=5
|
|||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="cadastery"
|
config/name="cadastery"
|
||||||
config/version="0.0.1"
|
config/version="0.0.2"
|
||||||
run/main_scene="res://scenes/title.tscn"
|
run/main_scene="res://scenes/title.tscn"
|
||||||
config/use_custom_user_dir=true
|
config/use_custom_user_dir=true
|
||||||
config/custom_user_dir_name="Cadastery"
|
config/custom_user_dir_name="Cadastery"
|
||||||
|
|||||||
@@ -19,9 +19,9 @@ anchor_left = 0.5
|
|||||||
anchor_top = 0.5
|
anchor_top = 0.5
|
||||||
anchor_right = 0.5
|
anchor_right = 0.5
|
||||||
anchor_bottom = 0.5
|
anchor_bottom = 0.5
|
||||||
offset_left = -216.0
|
offset_left = -321.5
|
||||||
offset_top = -84.0
|
offset_top = -84.0
|
||||||
offset_right = 216.0
|
offset_right = 321.5
|
||||||
offset_bottom = 84.0
|
offset_bottom = 84.0
|
||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
@@ -54,7 +54,7 @@ text = "Name:"
|
|||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
focus_neighbor_right = NodePath("../HostButton")
|
focus_neighbor_right = NodePath("../HostButton")
|
||||||
focus_neighbor_bottom = NodePath("../IpEdit")
|
focus_neighbor_bottom = NodePath("../AddressEdit")
|
||||||
theme_override_font_sizes/font_size = 26
|
theme_override_font_sizes/font_size = 26
|
||||||
text = "ass"
|
text = "ass"
|
||||||
|
|
||||||
@@ -65,12 +65,12 @@ focus_neighbor_bottom = NodePath("../JoinButton")
|
|||||||
theme_override_font_sizes/font_size = 26
|
theme_override_font_sizes/font_size = 26
|
||||||
text = "Host"
|
text = "Host"
|
||||||
|
|
||||||
[node name="IpLabel" type="Label" parent="Menu/PlayMenu/MarginContainer/GridContainer"]
|
[node name="AddressLabel" type="Label" parent="Menu/PlayMenu/MarginContainer/GridContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
theme_override_font_sizes/font_size = 26
|
theme_override_font_sizes/font_size = 26
|
||||||
text = "IP:"
|
text = "Address:"
|
||||||
|
|
||||||
[node name="IpEdit" type="LineEdit" parent="Menu/PlayMenu/MarginContainer/GridContainer"]
|
[node name="AddressEdit" type="LineEdit" parent="Menu/PlayMenu/MarginContainer/GridContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
size_flags_horizontal = 3
|
size_flags_horizontal = 3
|
||||||
focus_neighbor_top = NodePath("../NameEdit")
|
focus_neighbor_top = NodePath("../NameEdit")
|
||||||
@@ -80,7 +80,7 @@ text = "127.0.0.1"
|
|||||||
|
|
||||||
[node name="JoinButton" type="Button" parent="Menu/PlayMenu/MarginContainer/GridContainer"]
|
[node name="JoinButton" type="Button" parent="Menu/PlayMenu/MarginContainer/GridContainer"]
|
||||||
layout_mode = 2
|
layout_mode = 2
|
||||||
focus_neighbor_left = NodePath("../IpEdit")
|
focus_neighbor_left = NodePath("../AddressEdit")
|
||||||
focus_neighbor_top = NodePath("../HostButton")
|
focus_neighbor_top = NodePath("../HostButton")
|
||||||
theme_override_font_sizes/font_size = 26
|
theme_override_font_sizes/font_size = 26
|
||||||
text = "Join"
|
text = "Join"
|
||||||
|
|||||||
@@ -57,10 +57,10 @@ func host_game(dedicated: bool = false) -> void:
|
|||||||
_add_player(multiplayer.get_unique_id())
|
_add_player(multiplayer.get_unique_id())
|
||||||
|
|
||||||
|
|
||||||
func join_game(ip: String) -> void:
|
func join_game(address: String) -> void:
|
||||||
print("Joining " + ip + "...")
|
print("Joining " + address + "...")
|
||||||
_peer = ENetMultiplayerPeer.new()
|
_peer = ENetMultiplayerPeer.new()
|
||||||
var error := _peer.create_client(ip, DEFAULT_PORT)
|
var error := _peer.create_client(address, DEFAULT_PORT)
|
||||||
|
|
||||||
if error:
|
if error:
|
||||||
match error:
|
match error:
|
||||||
@@ -116,9 +116,12 @@ func _remove_player(peer_id: int) -> void:
|
|||||||
@rpc("any_peer", "reliable")
|
@rpc("any_peer", "reliable")
|
||||||
func _register_player(player_info: Dictionary) -> void:
|
func _register_player(player_info: Dictionary) -> void:
|
||||||
print("Registering player ", player_info)
|
print("Registering player ", player_info)
|
||||||
var player_id := multiplayer.get_remote_sender_id()
|
var peer_id := multiplayer.get_remote_sender_id()
|
||||||
_players[player_id] = player_info
|
if peer_id == 1 and !player_info["name"]:
|
||||||
player_connected.emit(player_id, player_info)
|
print("Registered player's id is ",peer_id, " and name is empty, so skipping")
|
||||||
|
return
|
||||||
|
_players[peer_id] = player_info
|
||||||
|
player_connected.emit(peer_id, player_info)
|
||||||
|
|
||||||
|
|
||||||
func _on_multiplayer_peer_connected(peer_id: int) -> void:
|
func _on_multiplayer_peer_connected(peer_id: int) -> void:
|
||||||
|
|||||||
@@ -1,15 +1,17 @@
|
|||||||
extends Panel
|
extends Panel
|
||||||
|
|
||||||
@onready var _name_edit: LineEdit = $MarginContainer/GridContainer/NameEdit
|
@onready var _name_edit: LineEdit = $MarginContainer/GridContainer/NameEdit
|
||||||
@onready var _ip_edit: LineEdit = $MarginContainer/GridContainer/IpEdit
|
@onready var _address_edit: LineEdit = $MarginContainer/GridContainer/AddressEdit
|
||||||
@onready var _host_button: Button = $MarginContainer/GridContainer/HostButton
|
@onready var _host_button: Button = $MarginContainer/GridContainer/HostButton
|
||||||
@onready var _join_button: Button = $MarginContainer/GridContainer/JoinButton
|
@onready var _join_button: Button = $MarginContainer/GridContainer/JoinButton
|
||||||
@onready var _error_label: Label = $ErrorLabel
|
@onready var _error_label: Label = $ErrorLabel
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
|
print("Cadastery v", ProjectSettings.get_setting("application/config/version"))
|
||||||
|
|
||||||
if OS.has_feature("dedicated_server") or DisplayServer.get_name() == "headless":
|
if OS.has_feature("dedicated_server") or DisplayServer.get_name() == "headless":
|
||||||
Networker.host_game(true)
|
Networker.call_deferred("host_game", true)
|
||||||
return
|
return
|
||||||
|
|
||||||
_host_button.pressed.connect(_on_host_button_pressed)
|
_host_button.pressed.connect(_on_host_button_pressed)
|
||||||
@@ -24,21 +26,24 @@ func _display_error(message: String) -> void:
|
|||||||
|
|
||||||
|
|
||||||
func _on_host_button_pressed() -> void:
|
func _on_host_button_pressed() -> void:
|
||||||
|
if !_name_edit.text:
|
||||||
|
_display_error("Name cannot be empty")
|
||||||
|
return
|
||||||
|
|
||||||
Networker.set_local_player_info(_name_edit.text)
|
Networker.set_local_player_info(_name_edit.text)
|
||||||
Networker.host_game()
|
Networker.host_game()
|
||||||
|
|
||||||
|
|
||||||
func _on_join_button_pressed() -> void:
|
func _on_join_button_pressed() -> void:
|
||||||
var ip: String = _ip_edit.text
|
if !_name_edit.text:
|
||||||
if not ip.is_valid_ip_address():
|
_display_error("Name cannot be empty")
|
||||||
_display_error("Invalid IP address")
|
|
||||||
return
|
return
|
||||||
|
|
||||||
_join_button.disabled = true
|
_join_button.disabled = true
|
||||||
_host_button.disabled = true
|
_host_button.disabled = true
|
||||||
|
|
||||||
Networker.set_local_player_info(_name_edit.text)
|
Networker.set_local_player_info(_name_edit.text)
|
||||||
Networker.join_game(_ip_edit.text)
|
Networker.join_game(_address_edit.text)
|
||||||
|
|
||||||
|
|
||||||
func _on_networker_network_error(message: String) -> void:
|
func _on_networker_network_error(message: String) -> void:
|
||||||
|
|||||||
Reference in New Issue
Block a user