Merge branch 'develop' into feat/ambiance

This commit is contained in:
anyreso 2024-04-25 18:44:05 -04:00
commit 415e63b66d
29 changed files with 155 additions and 95 deletions

View file

@ -47,11 +47,11 @@ If you want to contribute changes without write access to the repository, you ca
2. Once you have a fork, clone it to your local machine and create a new branch from the `develop` branch. 2. Once you have a fork, clone it to your local machine and create a new branch from the `develop` branch.
3. Then, you can make changes just like you would if you were a member of the project. 3. Then, you can make changes just like you would if you were a member of the project.
4. After you've made your changes, you commit them locally and push these back to your fork on gitlab. 4. After you've made your changes, you commit them locally and push these back to your fork on gitlab.
5. Finally, you can [create a merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#when-you-work-in-a-fork) from your fork's branch to upstream's branch. 5. Finally, you can [create a merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html#when-you-work-in-a-fork) from your fork's branch to upstream's `develop` branch.
> We encourage you to [allow commits from upstream members](https://docs.gitlab.com/ee/user/project/merge_requests/allow_collaboration.html#allow-commits-from-upstream-members) so that they can [push to the fork as the upstream member](https://docs.gitlab.com/ee/user/project/merge_requests/allow_collaboration.html#push-to-the-fork-as-the-upstream-member) in order for you to reach out for help. > We encourage you to [allow commits from upstream members](https://docs.gitlab.com/ee/user/project/merge_requests/allow_collaboration.html#allow-commits-from-upstream-members) so that they can [push to the fork as the upstream member](https://docs.gitlab.com/ee/user/project/merge_requests/allow_collaboration.html#push-to-the-fork-as-the-upstream-member) in order for you to reach out for help.
The merge request notifies project maintainers that you've made changes and allows them to review your code and potentially merge it into the main project. The merge request notifies project maintainers that you've made changes and allows them to review your code and potentially merge it into the `develop` branch.
When your branch is merged, you may want to [update your fork](https://docs.gitlab.com/ee/user/project/repository/forking_workflow.html#update-your-fork) to be synced with upstream. When your branch is merged, you may want to [update your fork](https://docs.gitlab.com/ee/user/project/repository/forking_workflow.html#update-your-fork) to be synced with upstream.

View file

@ -12,14 +12,13 @@
# #
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
class_name FlagCarryComponent extends Node class_name FlagCarryComponent extends Node3D
## This component allows its entity to grab, carry and throw flags ## This component allows its entity to grab, carry and throw flags
## ##
## To work correctly the owner MUST set an attachment point for carried flags ## To work correctly the owner MUST set an attachment point for carried flags
## and a sensor to detect when flags are within grab range ## and a sensor to detect when flags are within grab range
@export var max_throw_speed : float = 10.0 @export var max_throw_speed : float = 10.0
@export var attachment : Node3D
@export var sensor : Area3D @export var sensor : Area3D
@export var carrier : Player @export var carrier : Player
@ -28,24 +27,26 @@ var _carried_flag : Flag
func _ready() -> void: func _ready() -> void:
sensor.body_entered.connect(_sensor_on_body_entered) sensor.body_entered.connect(_sensor_on_body_entered)
func _process(_delta : float) -> void: func _physics_process(_delta : float) -> void:
if _is_carrying(): if _is_carrying():
_carried_flag.global_position = attachment.global_position _carried_flag.global_position = global_position
_carried_flag.global_rotation = attachment.global_rotation _carried_flag.global_rotation = global_rotation
func _grab(flag : Flag) -> void: func _grab(flag : Flag) -> void:
if not _is_carrying(): if not _is_carrying():
flag.grab(carrier) flag.grab(carrier)
_carried_flag = flag _carried_flag = flag
show()
func _release(inherited_velocity : Vector3, throw_speed : float) -> void: func _release(inherited_velocity : Vector3, throw_speed : float) -> void:
if _is_carrying(): if _is_carrying():
_carried_flag.drop() _carried_flag.drop()
_carried_flag.rotation_degrees.x = 0.0 _carried_flag.rotation_degrees.x = 0.0
_carried_flag.linear_velocity = inherited_velocity + (attachment.global_basis.z * throw_speed) _carried_flag.linear_velocity = inherited_velocity + (global_basis.z * throw_speed)
# Throw the flag from some distance in front of the player to avoid regrabbing mid-air # Throw the flag from some distance in front of the player to avoid regrabbing mid-air
_carried_flag.global_position = _carried_flag.global_position + (attachment.global_basis.z * 1.5) _carried_flag.global_position = _carried_flag.global_position + (global_basis.z * 1.5)
_carried_flag = null _carried_flag = null
hide()
func _is_carrying() -> bool: func _is_carrying() -> bool:
return _carried_flag != null return _carried_flag != null

View file

@ -2,5 +2,5 @@
[ext_resource type="Script" path="res://components/flag_carry_component.gd" id="1_b6ee8"] [ext_resource type="Script" path="res://components/flag_carry_component.gd" id="1_b6ee8"]
[node name="FlagCarryComponent" type="Node"] [node name="FlagCarryComponent" type="Node3D"]
script = ExtResource("1_b6ee8") script = ExtResource("1_b6ee8")

View file

@ -9,12 +9,14 @@ signal regrabbed
signal dropped signal dropped
var last_carrier : Player = null var last_carrier : Player = null
@onready var _mesh : Node = $Smoothing/Mesh
func can_be_grabbed() -> bool: func can_be_grabbed() -> bool:
return flag_state != FlagState.FLAG_STATE_TAKEN return flag_state != FlagState.FLAG_STATE_TAKEN
func grab(grabber : Player) -> void: func grab(grabber : Player) -> void:
if flag_state != FlagState.FLAG_STATE_TAKEN: if flag_state != FlagState.FLAG_STATE_TAKEN:
_mesh.hide()
flag_state = FlagState.FLAG_STATE_TAKEN flag_state = FlagState.FLAG_STATE_TAKEN
if (last_carrier == null) or (grabber != last_carrier): if (last_carrier == null) or (grabber != last_carrier):
grabbed.emit(grabber) grabbed.emit(grabber)
@ -24,6 +26,7 @@ func grab(grabber : Player) -> void:
func drop() -> void: func drop() -> void:
if flag_state == FlagState.FLAG_STATE_TAKEN: if flag_state == FlagState.FLAG_STATE_TAKEN:
_mesh.show()
flag_state = FlagState.FLAG_STATE_DROPPED flag_state = FlagState.FLAG_STATE_DROPPED
dropped.emit() dropped.emit()

View file

@ -1,10 +1,12 @@
[gd_scene load_steps=7 format=3 uid="uid://c88l3h0ph00c7"] [gd_scene load_steps=8 format=3 uid="uid://c88l3h0ph00c7"]
[ext_resource type="Script" path="res://entities/flag/flag.gd" id="1_y7d3d"] [ext_resource type="Script" path="res://entities/flag/flag.gd" id="1_y7d3d"]
[ext_resource type="Script" path="res://addons/smoothing/smoothing.gd" id="2_es4ce"]
[ext_resource type="PackedScene" uid="uid://d3l7fvbdg6m5g" path="res://entities/flag/assets/flag.glb" id="2_i78em"] [ext_resource type="PackedScene" uid="uid://d3l7fvbdg6m5g" path="res://entities/flag/assets/flag.glb" id="2_i78em"]
[ext_resource type="PackedScene" uid="uid://bcgkc5fhhyauv" path="res://entities/flag/waypoint.tscn" id="3_tu6jg"] [ext_resource type="PackedScene" uid="uid://bcgkc5fhhyauv" path="res://entities/flag/waypoint.tscn" id="3_tu6jg"]
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_4ymrw"] [sub_resource type="PhysicsMaterial" id="PhysicsMaterial_4ymrw"]
friction = 0.5
bounce = 0.5 bounce = 0.5
[sub_resource type="BoxShape3D" id="BoxShape3D_fkf1k"] [sub_resource type="BoxShape3D" id="BoxShape3D_fkf1k"]
@ -20,6 +22,9 @@ properties/1/replication_mode = 1
properties/2/path = NodePath(".:flag_state") properties/2/path = NodePath(".:flag_state")
properties/2/spawn = true properties/2/spawn = true
properties/2/replication_mode = 2 properties/2/replication_mode = 2
properties/3/path = NodePath("Smoothing/Mesh:visible")
properties/3/spawn = true
properties/3/replication_mode = 2
[node name="Flag" type="RigidBody3D"] [node name="Flag" type="RigidBody3D"]
collision_layer = 8 collision_layer = 8
@ -34,9 +39,6 @@ center_of_mass = Vector3(0, 0.5, 0)
continuous_cd = true continuous_cd = true
script = ExtResource("1_y7d3d") script = ExtResource("1_y7d3d")
[node name="Mesh" parent="." instance=ExtResource("2_i78em")]
transform = Transform3D(0.33, 0, 0, 0, 0.421029, 0, 0, 0, 0.33, 0, 0.0744106, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = SubResource("BoxShape3D_fkf1k") shape = SubResource("BoxShape3D_fkf1k")
@ -44,8 +46,14 @@ shape = SubResource("BoxShape3D_fkf1k")
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."] [node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
replication_config = SubResource("SceneReplicationConfig_lpijf") replication_config = SubResource("SceneReplicationConfig_lpijf")
[node name="WaypointAttachment" type="Marker3D" parent="."] [node name="Smoothing" type="Node3D" parent="."]
script = ExtResource("2_es4ce")
[node name="Waypoint" parent="WaypointAttachment" node_paths=PackedStringArray("attach_point", "flag") instance=ExtResource("3_tu6jg")] [node name="WaypointAttachment" type="Marker3D" parent="Smoothing"]
[node name="Waypoint" parent="Smoothing/WaypointAttachment" node_paths=PackedStringArray("attach_point", "flag") instance=ExtResource("3_tu6jg")]
attach_point = NodePath("..") attach_point = NodePath("..")
flag = NodePath("../..") flag = NodePath("../../..")
[node name="Mesh" parent="Smoothing" instance=ExtResource("2_i78em")]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.0744106, 0)

View file

@ -49,10 +49,9 @@ enum PlayerState { PLAYER_ALIVE, PLAYER_DEAD }
@onready var animation_player : AnimationPlayer = $AnimationPlayer @onready var animation_player : AnimationPlayer = $AnimationPlayer
@onready var health_component : Area3D = $HealthComponent @onready var health_component : Area3D = $HealthComponent
@onready var collision_shape : CollisionShape3D = $CollisionShape3D @onready var collision_shape : CollisionShape3D = $CollisionShape3D
@onready var flag_carry_component : FlagCarryComponent = $FlagCarryComponent @onready var flag_carry_component : FlagCarryComponent = $Smoothing/SpringArm3D/FlagCarryComponent
@onready var spring_arm_height : float = $Smoothing/SpringArm3D.position.y @onready var spring_arm_height : float = $Smoothing/SpringArm3D.position.y
@onready var _original_weapon_transform : Transform3D = weapon.transform @onready var _original_weapon_transform : Transform3D = weapon.transform
@onready var flag_carry_attachment : Node3D = $Smoothing/SpringArm3D/FlagCarryAttachment
@onready var tp_player : Vanguard = $Smoothing/ThirdPerson/PlayerMesh @onready var tp_player : Vanguard = $Smoothing/ThirdPerson/PlayerMesh
@onready var _game_settings : Settings = get_node("/root/GlobalSettings") @onready var _game_settings : Settings = get_node("/root/GlobalSettings")
@ -86,7 +85,6 @@ func _ready() -> void:
camera.fov = _game_settings.fov camera.fov = _game_settings.fov
# set the spring arm translation to be about head height level # set the spring arm translation to be about head height level
$Smoothing/SpringArm3D.transform = Transform3D().translated(Vector3(0, collision_shape.shape.height / 2, 0) * 0.9) $Smoothing/SpringArm3D.transform = Transform3D().translated(Vector3(0, collision_shape.shape.height / 2, 0) * 0.9)
flag_carry_attachment.hide()
$Smoothing.remove_child($Smoothing/ThirdPerson) $Smoothing.remove_child($Smoothing/ThirdPerson)
else: else:

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=18 format=3 uid="uid://cbhx1xme0sb7k"] [gd_scene load_steps=19 format=3 uid="uid://cbhx1xme0sb7k"]
[ext_resource type="Script" path="res://entities/player/player.gd" id="1_mk68k"] [ext_resource type="Script" path="res://entities/player/player.gd" id="1_mk68k"]
[ext_resource type="PackedScene" uid="uid://drbefw6akui2v" path="res://entities/player/assets/vanguard.tscn" id="2_beyex"] [ext_resource type="PackedScene" uid="uid://drbefw6akui2v" path="res://entities/player/assets/vanguard.tscn" id="2_beyex"]
@ -9,6 +9,7 @@
[ext_resource type="Script" path="res://entities/player/player_input.gd" id="6_ymcrr"] [ext_resource type="Script" path="res://entities/player/player_input.gd" id="6_ymcrr"]
[ext_resource type="PackedScene" uid="uid://dsysi2rd3bu76" path="res://interfaces/hud/iffs/iff.tscn" id="7_8hc80"] [ext_resource type="PackedScene" uid="uid://dsysi2rd3bu76" path="res://interfaces/hud/iffs/iff.tscn" id="7_8hc80"]
[ext_resource type="PackedScene" uid="uid://2t8ql8pkxv6c" path="res://components/flag_carry_component.tscn" id="7_e7s1a"] [ext_resource type="PackedScene" uid="uid://2t8ql8pkxv6c" path="res://components/flag_carry_component.tscn" id="7_e7s1a"]
[ext_resource type="PackedScene" uid="uid://d3l7fvbdg6m5g" path="res://entities/flag/assets/flag.glb" id="9_fce2y"]
[ext_resource type="Script" path="res://addons/smoothing/smoothing.gd" id="11_k330l"] [ext_resource type="Script" path="res://addons/smoothing/smoothing.gd" id="11_k330l"]
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_clur0"] [sub_resource type="PhysicsMaterial" id="PhysicsMaterial_clur0"]
@ -130,11 +131,6 @@ shape = ExtResource("2_vjqny")
[node name="CollisionShape3D" type="CollisionShape3D" parent="HealthComponent"] [node name="CollisionShape3D" type="CollisionShape3D" parent="HealthComponent"]
shape = ExtResource("2_vjqny") shape = ExtResource("2_vjqny")
[node name="FlagCarryComponent" parent="." node_paths=PackedStringArray("attachment", "sensor", "carrier") instance=ExtResource("7_e7s1a")]
attachment = NodePath("../Smoothing/SpringArm3D/FlagCarryAttachment")
sensor = NodePath("../Sensor")
carrier = NodePath("..")
[node name="AnimationPlayer" type="AnimationPlayer" parent="."] [node name="AnimationPlayer" type="AnimationPlayer" parent="."]
libraries = { libraries = {
"": SubResource("AnimationLibrary_hg307") "": SubResource("AnimationLibrary_hg307")
@ -174,8 +170,14 @@ holder = NodePath("../../../..")
[node name="SpineIKTarget" type="Node3D" parent="Smoothing/SpringArm3D"] [node name="SpineIKTarget" type="Node3D" parent="Smoothing/SpringArm3D"]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0)
[node name="FlagCarryAttachment" type="Node3D" parent="Smoothing/SpringArm3D"] [node name="FlagCarryComponent" parent="Smoothing/SpringArm3D" node_paths=PackedStringArray("sensor", "carrier") instance=ExtResource("7_e7s1a")]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, -0.620994, -0.287925) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0.150603)
visible = false
sensor = NodePath("../../../Sensor")
carrier = NodePath("../../..")
[node name="FlagMesh" parent="Smoothing/SpringArm3D/FlagCarryComponent" instance=ExtResource("9_fce2y")]
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, -0.602515, 0)
[node name="ThirdPerson" type="Node3D" parent="Smoothing"] [node name="ThirdPerson" type="Node3D" parent="Smoothing"]

View file

@ -51,6 +51,9 @@ signal join_server(host : String, port : int)
@onready var modal : Control = $Modal @onready var modal : Control = $Modal
@onready var menu : CanvasLayer = get_parent() @onready var menu : CanvasLayer = get_parent()
@onready var game : Node3D = get_tree().current_scene
@onready var map_selector : OptionButton = %MapSelector
@export var tab_container : TabContainer @export var tab_container : TabContainer
func _ready() -> void: func _ready() -> void:
@ -58,7 +61,12 @@ func _ready() -> void:
_registered_ports.compile(r'^(?:102[4-9]|10[3-9]\\d|1[1-9]\\d{2}|[2-9]\\d{3}|[1-5]\\d{4}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5])$') _registered_ports.compile(r'^(?:102[4-9]|10[3-9]\\d|1[1-9]\\d{2}|[2-9]\\d{3}|[1-5]\\d{4}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5])$')
_join_address.compile(r'^(?<host>[a-zA-Z0-9.-]+)(:(?<port>:102[4-9]|10[3-9]\\d|1[1-9]\\d{2}|[2-9]\\d{3}|[1-5]\\d{4}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5]))?$') _join_address.compile(r'^(?<host>[a-zA-Z0-9.-]+)(:(?<port>:102[4-9]|10[3-9]\\d|1[1-9]\\d{2}|[2-9]\\d{3}|[1-5]\\d{4}|6[0-4]\\d{3}|65[0-4]\\d{2}|655[0-2]\\d|6553[0-5]))?$')
_load_config() _load_config()
hide() # start hidden call_deferred(\"_populate_map_selector\")
func _populate_map_selector() -> void:
for map : PackedScene in game.maps:
var map_name : String = map._bundled.names[0]
map_selector.add_item(map_name)
func _load_config() -> void: func _load_config() -> void:
var error : Error = _config_file.load(CONFIG_FILE_PATH) var error : Error = _config_file.load(CONFIG_FILE_PATH)
@ -406,6 +414,12 @@ unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
placeholder_text = "9000" placeholder_text = "9000"
[node name="MapSelector" type="OptionButton" parent="Multiplayer/MarginContainer/VBoxContainer/TabContainer/Host/MarginContainer/HBoxContainer/RightBox"]
unique_name_in_owner = true
layout_mode = 2
clip_text = true
allow_reselect = true
[node name="Modal" type="Panel" parent="Multiplayer"] [node name="Modal" type="Panel" parent="Multiplayer"]
visible = false visible = false
layout_mode = 2 layout_mode = 2

View file

@ -1,8 +1,9 @@
[gd_scene load_steps=5 format=3 uid="uid://ma1if3sjox6i"] [gd_scene load_steps=6 format=3 uid="uid://ma1if3sjox6i"]
[ext_resource type="PackedScene" uid="uid://boviiugcnfyrj" path="res://modes/demo.tscn" id="1_50a80"] [ext_resource type="PackedScene" uid="uid://boviiugcnfyrj" path="res://modes/demo.tscn" id="1_50a80"]
[ext_resource type="PackedScene" uid="uid://bjctlqvs33nqy" path="res://interfaces/menus/boot/boot.tscn" id="1_acy5o"] [ext_resource type="PackedScene" uid="uid://bjctlqvs33nqy" path="res://interfaces/menus/boot/boot.tscn" id="1_acy5o"]
[ext_resource type="PackedScene" uid="uid://bvwxfgygm2xb8" path="res://modes/multiplayer.tscn" id="2_g8xeb"] [ext_resource type="PackedScene" uid="uid://bvwxfgygm2xb8" path="res://modes/multiplayer.tscn" id="2_g8xeb"]
[ext_resource type="Resource" uid="uid://cggykuclb5umn" path="res://maps/maps.tres" id="3_1ipir"]
[sub_resource type="GDScript" id="GDScript_e61dq"] [sub_resource type="GDScript" id="GDScript_e61dq"]
script/source = "class_name Game extends Node3D script/source = "class_name Game extends Node3D
@ -11,6 +12,11 @@ script/source = "class_name Game extends Node3D
@export var SINGLEPLAYER : PackedScene @export var SINGLEPLAYER : PackedScene
@export var MULTIPLAYER : PackedScene @export var MULTIPLAYER : PackedScene
@export_category(\"Maps\")
@export var _maps_resource : ArrayPackedSceneResource
@onready var maps : Array[PackedScene] = _maps_resource.get_items()
var mode : Node: var mode : Node:
set(new_mode): set(new_mode):
# clean up previous mode # clean up previous mode
@ -36,7 +42,7 @@ func _unhandled_input(event : InputEvent) -> void:
# reset game mode # reset game mode
mode = null mode = null
# check for debug build # check for debug build
if not OS.is_debug_build(): if OS.is_debug_build():
# exit with success # exit with success
get_tree().quit(0) get_tree().quit(0)
else: else:
@ -63,7 +69,11 @@ func _start_demo() -> void:
func _start_server(port : int, nickname : String) -> void: func _start_server(port : int, nickname : String) -> void:
mode = MULTIPLAYER.instantiate() mode = MULTIPLAYER.instantiate()
mode.start_server(port, nickname) mode.start_server({
\"port\": port,
\"nickname\": nickname,
\"map\": maps[clamp($BootMenu/Multiplayer.map_selector.selected, 0, len(maps))]
})
$BootMenu.hide() $BootMenu.hide()
func _join_server(host : String, port : int, nickname : String) -> void: func _join_server(host : String, port : int, nickname : String) -> void:
@ -77,5 +87,6 @@ func _join_server(host : String, port : int, nickname : String) -> void:
script = SubResource("GDScript_e61dq") script = SubResource("GDScript_e61dq")
SINGLEPLAYER = ExtResource("1_50a80") SINGLEPLAYER = ExtResource("1_50a80")
MULTIPLAYER = ExtResource("2_g8xeb") MULTIPLAYER = ExtResource("2_g8xeb")
_maps_resource = ExtResource("3_1ipir")
[node name="BootMenu" parent="." instance=ExtResource("1_acy5o")] [node name="BootMenu" parent="." instance=ExtResource("1_acy5o")]

View file

@ -1,11 +1,20 @@
[gd_scene load_steps=5 format=3 uid="uid://btlkog4b87p4x"] [gd_scene load_steps=6 format=3 uid="uid://btlkog4b87p4x"]
[ext_resource type="Terrain3DStorage" uid="uid://wgmg245njt8e" path="res://maps/desert/resources/storage.res" id="1_7nbyj"] [ext_resource type="Terrain3DStorage" uid="uid://wgmg245njt8e" path="res://maps/desert/resources/storage.res" id="1_7nbyj"]
[ext_resource type="Environment" uid="uid://nw62ce5cglvs" path="res://environments/desert.tres" id="1_e1o3u"] [ext_resource type="Environment" uid="uid://nw62ce5cglvs" path="res://environments/desert.tres" id="1_e1o3u"]
[ext_resource type="Terrain3DMaterial" uid="uid://c3isipd4wqxpk" path="res://maps/desert/resources/material.tres" id="2_psdr0"] [ext_resource type="Terrain3DMaterial" uid="uid://c3isipd4wqxpk" path="res://maps/desert/resources/material.tres" id="2_psdr0"]
[ext_resource type="Terrain3DTextureList" uid="uid://d1j24k8sq8qpj" path="res://maps/desert/resources/textures.tres" id="3_aowug"] [ext_resource type="Terrain3DTextureList" uid="uid://d1j24k8sq8qpj" path="res://maps/desert/resources/textures.tres" id="3_aowug"]
[ext_resource type="Script" path="res://maps/map.gd" id="4_cl7fm"]
[node name="Desert" type="Node3D"] [node name="Desert" type="Terrain3D" node_paths=PackedStringArray("_flagstand", "_player_spawns_root")]
storage = ExtResource("1_7nbyj")
material = ExtResource("2_psdr0")
texture_list = ExtResource("3_aowug")
collision_layer = 2147483648
collision_mask = 2147483648
script = ExtResource("4_cl7fm")
_flagstand = NodePath("FlagStand")
_player_spawns_root = NodePath("PlayerSpawns")
[node name="Sunlight" type="DirectionalLight3D" parent="."] [node name="Sunlight" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.5, 0.55667, -0.663414, 0, 0.766044, 0.642788, 0.866025, -0.321394, 0.383022, -1613.38, 2730.74, 446.64) transform = Transform3D(0.5, 0.55667, -0.663414, 0, 0.766044, 0.642788, 0.866025, -0.321394, 0.383022, -1613.38, 2730.74, 446.64)
@ -14,9 +23,13 @@ shadow_enabled = true
[node name="WorldEnvironment" type="WorldEnvironment" parent="."] [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = ExtResource("1_e1o3u") environment = ExtResource("1_e1o3u")
[node name="Terrain3D" type="Terrain3D" parent="."] [node name="PlayerSpawns" type="Node" parent="."]
storage = ExtResource("1_7nbyj")
material = ExtResource("2_psdr0") [node name="Spawn1" type="Marker3D" parent="PlayerSpawns"]
texture_list = ExtResource("3_aowug") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1024, 172.13, 1024)
collision_layer = 2147483648
collision_mask = 2147483648 [node name="Spawn2" type="Marker3D" parent="PlayerSpawns"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1161.42, 174.535, 909.901)
[node name="FlagStand" type="Marker3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 878.613, 134.55, 916.185)

View file

Before

Width:  |  Height:  |  Size: 3.1 MiB

After

Width:  |  Height:  |  Size: 3.1 MiB

Before After
Before After

View file

@ -3,7 +3,7 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://ddprscrpsofah" uid="uid://ddprscrpsofah"
path.bptc="res://.godot/imported/ground037_alb_ht.png-e94bcf81dfd35d432692c06ac781741b.bptc.ctex" path.bptc="res://.godot/imported/ground037_alb_ht.png-b65037b7797c79d182d5e53b32e49a98.bptc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@ -11,8 +11,8 @@ metadata={
[deps] [deps]
source_file="res://maps/genesis/textures/ground037_alb_ht.png" source_file="res://maps/genesis/assets/textures/ground037_alb_ht.png"
dest_files=["res://.godot/imported/ground037_alb_ht.png-e94bcf81dfd35d432692c06ac781741b.bptc.ctex"] dest_files=["res://.godot/imported/ground037_alb_ht.png-b65037b7797c79d182d5e53b32e49a98.bptc.ctex"]
[params] [params]

View file

Before

Width:  |  Height:  |  Size: 3.1 MiB

After

Width:  |  Height:  |  Size: 3.1 MiB

Before After
Before After

View file

@ -3,7 +3,7 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://c1ots7w6i0i1q" uid="uid://c1ots7w6i0i1q"
path.bptc="res://.godot/imported/ground037_nrm_rgh.png-81b0e480d48434b2b70dcb00c9b9be8a.bptc.ctex" path.bptc="res://.godot/imported/ground037_nrm_rgh.png-9e25ec612e0ce15ff2c117ec4096a8f7.bptc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@ -11,8 +11,8 @@ metadata={
[deps] [deps]
source_file="res://maps/genesis/textures/ground037_nrm_rgh.png" source_file="res://maps/genesis/assets/textures/ground037_nrm_rgh.png"
dest_files=["res://.godot/imported/ground037_nrm_rgh.png-81b0e480d48434b2b70dcb00c9b9be8a.bptc.ctex"] dest_files=["res://.godot/imported/ground037_nrm_rgh.png-9e25ec612e0ce15ff2c117ec4096a8f7.bptc.ctex"]
[params] [params]

View file

Before

Width:  |  Height:  |  Size: 2.5 MiB

After

Width:  |  Height:  |  Size: 2.5 MiB

Before After
Before After

View file

@ -3,7 +3,7 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://br7bfxcxh60df" uid="uid://br7bfxcxh60df"
path.bptc="res://.godot/imported/rock030_alb_ht.png-194ac44f1664ad902e6112d7c538b8ea.bptc.ctex" path.bptc="res://.godot/imported/rock030_alb_ht.png-264f70712792662fedd23fe3bac9e221.bptc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@ -11,8 +11,8 @@ metadata={
[deps] [deps]
source_file="res://maps/genesis/textures/rock030_alb_ht.png" source_file="res://maps/genesis/assets/textures/rock030_alb_ht.png"
dest_files=["res://.godot/imported/rock030_alb_ht.png-194ac44f1664ad902e6112d7c538b8ea.bptc.ctex"] dest_files=["res://.godot/imported/rock030_alb_ht.png-264f70712792662fedd23fe3bac9e221.bptc.ctex"]
[params] [params]

View file

Before

Width:  |  Height:  |  Size: 3.1 MiB

After

Width:  |  Height:  |  Size: 3.1 MiB

Before After
Before After

View file

@ -3,7 +3,7 @@
importer="texture" importer="texture"
type="CompressedTexture2D" type="CompressedTexture2D"
uid="uid://cr72kjil43vgj" uid="uid://cr72kjil43vgj"
path.bptc="res://.godot/imported/rock030_nrm_rgh.png-4c72231defef9c07b29c49d8904a13df.bptc.ctex" path.bptc="res://.godot/imported/rock030_nrm_rgh.png-ca17d43269b25394f8e7aa1fa0631681.bptc.ctex"
metadata={ metadata={
"imported_formats": ["s3tc_bptc"], "imported_formats": ["s3tc_bptc"],
"vram_texture": true "vram_texture": true
@ -11,8 +11,8 @@ metadata={
[deps] [deps]
source_file="res://maps/genesis/textures/rock030_nrm_rgh.png" source_file="res://maps/genesis/assets/textures/rock030_nrm_rgh.png"
dest_files=["res://.godot/imported/rock030_nrm_rgh.png-4c72231defef9c07b29c49d8904a13df.bptc.ctex"] dest_files=["res://.godot/imported/rock030_nrm_rgh.png-ca17d43269b25394f8e7aa1fa0631681.bptc.ctex"]
[params] [params]

View file

@ -7,54 +7,40 @@
[ext_resource type="Terrain3DTextureList" uid="uid://dnqa8kxgm3xuw" path="res://maps/genesis/resources/textures.res" id="3_1cww7"] [ext_resource type="Terrain3DTextureList" uid="uid://dnqa8kxgm3xuw" path="res://maps/genesis/resources/textures.res" id="3_1cww7"]
[ext_resource type="AudioStream" uid="uid://bfve0qppqo17j" path="res://sounds/ambiance/Systematic Sound - General Ambience Series - Rural Countryside 01/AMBRurl_Meadow Open Plane Windy Deep Rumble_SYSO_SYSO011-1.tres" id="6_xrtaj"] [ext_resource type="AudioStream" uid="uid://bfve0qppqo17j" path="res://sounds/ambiance/Systematic Sound - General Ambience Series - Rural Countryside 01/AMBRurl_Meadow Open Plane Windy Deep Rumble_SYSO_SYSO011-1.tres" id="6_xrtaj"]
[sub_resource type="CapsuleMesh" id="CapsuleMesh_k2vhq"] [node name="Genesis" type="Terrain3D" node_paths=PackedStringArray("_flagstand", "_player_spawns_root")]
[sub_resource type="CapsuleMesh" id="CapsuleMesh_5ytwx"]
[node name="Map" type="Node" node_paths=PackedStringArray("_flagstand", "_player_spawns_root")]
script = ExtResource("1_6ysiv")
_flagstand = NodePath("Terrain3D/FlagPillar/CSGCylinder3D/FlagStand")
_player_spawns_root = NodePath("Terrain3D/PlayerSpawns")
[node name="Terrain3D" type="Terrain3D" parent="."]
storage = ExtResource("1_a88qe") storage = ExtResource("1_a88qe")
material = ExtResource("2_o2y3d") material = ExtResource("2_o2y3d")
texture_list = ExtResource("3_1cww7") texture_list = ExtResource("3_1cww7")
collision_layer = 2147483648 collision_layer = 2147483648
collision_mask = 2147483648 collision_mask = 2147483648
mesh_size = 24 mesh_size = 24
script = ExtResource("1_6ysiv")
_flagstand = NodePath("FlagPillar/CSGCylinder3D/FlagStand")
_player_spawns_root = NodePath("PlayerSpawns")
[node name="PlayerSpawns" type="Node" parent="Terrain3D"] [node name="PlayerSpawns" type="Node" parent="."]
[node name="Spawn1" type="Marker3D" parent="Terrain3D/PlayerSpawns"] [node name="Spawn1" type="Marker3D" parent="PlayerSpawns"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 95.5378, -32.735) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 95.5378, -32.735)
visible = false
[node name="MeshInstance3D" type="MeshInstance3D" parent="Terrain3D/PlayerSpawns/Spawn1"] [node name="Spawn2" type="Marker3D" parent="PlayerSpawns"]
mesh = SubResource("CapsuleMesh_k2vhq")
[node name="Spawn2" type="Marker3D" parent="Terrain3D/PlayerSpawns"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 98.3078, 18.061) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 98.3078, 18.061)
visible = false
[node name="MeshInstance3D" type="MeshInstance3D" parent="Terrain3D/PlayerSpawns/Spawn2"] [node name="FlagPillar" type="CSGCombiner3D" parent="."]
mesh = SubResource("CapsuleMesh_5ytwx")
[node name="FlagPillar" type="CSGCombiner3D" parent="Terrain3D"]
transform = Transform3D(1, 0, 0, 0, 2.83726, 0, 0, 0, 1, 0, 94.6411, 0) transform = Transform3D(1, 0, 0, 0, 2.83726, 0, 0, 0, 1, 0, 94.6411, 0)
use_collision = true use_collision = true
collision_layer = 2147483648 collision_layer = 2147483648
collision_mask = 0 collision_mask = 0
[node name="CSGBox3D" type="CSGBox3D" parent="Terrain3D/FlagPillar"] [node name="CSGBox3D" type="CSGBox3D" parent="FlagPillar"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.9311, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.9311, 0)
size = Vector3(0.5, 6, 0.5) size = Vector3(0.5, 6, 0.5)
[node name="CSGCylinder3D" type="CSGCylinder3D" parent="Terrain3D/FlagPillar"] [node name="CSGCylinder3D" type="CSGCylinder3D" parent="FlagPillar"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.42967, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.42967, 0)
height = 5.0 height = 5.0
[node name="FlagStand" type="Marker3D" parent="Terrain3D/FlagPillar/CSGCylinder3D"] [node name="FlagStand" type="Marker3D" parent="FlagPillar/CSGCylinder3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.53822, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.53822, 0)
[node name="Sunlight" type="DirectionalLight3D" parent="."] [node name="Sunlight" type="DirectionalLight3D" parent="."]

Binary file not shown.

View file

@ -1,4 +1,4 @@
class_name Map extends Node class_name Map extends Terrain3D
@export var _flagstand : Node3D @export var _flagstand : Node3D
@export var _player_spawns_root : Node @export var _player_spawns_root : Node

9
maps/maps.tres Normal file
View file

@ -0,0 +1,9 @@
[gd_resource type="Resource" script_class="ArrayPackedSceneResource" load_steps=4 format=3 uid="uid://cggykuclb5umn"]
[ext_resource type="PackedScene" uid="uid://chbno00ugl6te" path="res://maps/genesis/genesis.tscn" id="1_7kpvp"]
[ext_resource type="PackedScene" uid="uid://btlkog4b87p4x" path="res://maps/desert/desert.tscn" id="2_8vsif"]
[ext_resource type="Script" path="res://types/resources/array_packed_scene.gd" id="3_by6r1"]
[resource]
script = ExtResource("3_by6r1")
_packed_scenes = Array[PackedScene]([ExtResource("1_7kpvp"), ExtResource("2_8vsif")])

View file

@ -15,7 +15,6 @@
class_name Multiplayer extends Node class_name Multiplayer extends Node
@export_category("Parameters") @export_category("Parameters")
@export var MAP : PackedScene
@export var PLAYER : PackedScene @export var PLAYER : PackedScene
@export var FLAG : PackedScene @export var FLAG : PackedScene
@export var MAX_CLIENTS : int = 24 @export var MAX_CLIENTS : int = 24
@ -38,16 +37,21 @@ func _ready() -> void:
_flag_carrier_scoring_timer.timeout.connect(_on_flag_carrier_scoring_timer_timeout) _flag_carrier_scoring_timer.timeout.connect(_on_flag_carrier_scoring_timer_timeout)
add_child(_flag_carrier_scoring_timer) add_child(_flag_carrier_scoring_timer)
func start_server(port : int, nickname : String) -> void: func start_server(config : Dictionary) -> void:
# Check if required parameters are missing
var required_params : Array[String] = ["port", "map", "nickname"]
for param in required_params:
if not config.has(param):
print("Missing param in server config:", param)
return
# server setup
var peer : ENetMultiplayerPeer = ENetMultiplayerPeer.new() var peer : ENetMultiplayerPeer = ENetMultiplayerPeer.new()
peer.create_server(port, MAX_CLIENTS) peer.create_server(config["port"], MAX_CLIENTS)
multiplayer.multiplayer_peer = peer multiplayer.multiplayer_peer = peer
_load_map.call_deferred(MAP, nickname)
multiplayer.peer_disconnected.connect(remove_player) multiplayer.peer_disconnected.connect(remove_player)
_load_map.call_deferred(config["map"], config["nickname"])
func join_server(host : String, port : int, nickname : String) -> void: func join_server(host : String, port : int, nickname : String) -> void:
var peer : ENetMultiplayerPeer = ENetMultiplayerPeer.new() var peer : ENetMultiplayerPeer = ENetMultiplayerPeer.new()
peer.create_client(host, port) peer.create_client(host, port)

View file

@ -1,6 +1,5 @@
[gd_scene load_steps=6 format=3 uid="uid://bvwxfgygm2xb8"] [gd_scene load_steps=5 format=3 uid="uid://bvwxfgygm2xb8"]
[ext_resource type="PackedScene" uid="uid://chbno00ugl6te" path="res://maps/genesis/genesis.tscn" id="1_nulvv"]
[ext_resource type="Script" path="res://modes/multiplayer.gd" id="1_r1kd6"] [ext_resource type="Script" path="res://modes/multiplayer.gd" id="1_r1kd6"]
[ext_resource type="PackedScene" uid="uid://cbhx1xme0sb7k" path="res://entities/player/player.tscn" id="2_og1vb"] [ext_resource type="PackedScene" uid="uid://cbhx1xme0sb7k" path="res://entities/player/player.tscn" id="2_og1vb"]
[ext_resource type="PackedScene" uid="uid://c88l3h0ph00c7" path="res://entities/flag/flag.tscn" id="3_h0rie"] [ext_resource type="PackedScene" uid="uid://c88l3h0ph00c7" path="res://entities/flag/flag.tscn" id="3_h0rie"]
@ -8,7 +7,6 @@
[node name="Multiplayer" type="Node"] [node name="Multiplayer" type="Node"]
script = ExtResource("1_r1kd6") script = ExtResource("1_r1kd6")
MAP = ExtResource("1_nulvv")
PLAYER = ExtResource("2_og1vb") PLAYER = ExtResource("2_og1vb")
FLAG = ExtResource("3_h0rie") FLAG = ExtResource("3_h0rie")

View file

@ -15,7 +15,7 @@
extends GutTest extends GutTest
var PLAYER : PackedScene = preload("res://entities/player/player.tscn") var PLAYER : PackedScene = preload("res://entities/player/player.tscn")
var SCOREBOARD : PackedScene = preload("res://interfaces/hud/scoreboard.tscn") var SCOREBOARD : PackedScene = preload("res://interfaces/scoreboard/scoreboard.tscn")
var _subject : Scoreboard var _subject : Scoreboard

View file

@ -0,0 +1,6 @@
class_name ArrayPackedSceneResource extends Resource
@export var _packed_scenes : Array[PackedScene] = []
func get_items() -> Array[PackedScene]:
return _packed_scenes

View file

@ -0,0 +1,7 @@
[gd_resource type="Resource" script_class="ArrayPackedSceneResource" load_steps=2 format=3 uid="uid://cpnargstkucch"]
[ext_resource type="Script" path="res://types/resources/array_packed_scene.gd" id="1_r1ygd"]
[resource]
script = ExtResource("1_r1ygd")
_packed_scenes = Array[PackedScene]([])