Compare commits
34 Commits
7a1dcc0e01
...
58ff747402
| Author | SHA1 | Date | |
|---|---|---|---|
| 58ff747402 | |||
|
|
ec0bef4d92 | ||
|
|
def4324902 | ||
|
|
59cbbc0880 | ||
|
|
898a382a71 | ||
|
|
912e6b9d31 | ||
|
|
95d384b0ee | ||
|
|
70f0a65a3a | ||
|
|
724d78973b | ||
|
|
69596dac01 | ||
|
|
eb783c37da | ||
|
|
14464d703c | ||
|
|
5807549863 | ||
|
|
3d44cc7761 | ||
|
|
bbbfd424ec | ||
|
|
39e944806c | ||
| 80b4d213e5 | |||
| 9706bc561f | |||
| d31c4cfe5c | |||
| 0b3b6a5f0a | |||
| 34dc8e7c85 | |||
| 893e7c920c | |||
| 5f65fde280 | |||
| 809886ade6 | |||
| 4a42e16da2 | |||
| c128223b42 | |||
| 8cc9d94832 | |||
| 23e55d36c2 | |||
| 1ce22e44d9 | |||
| 83adac8b43 | |||
| 56be2f7bef | |||
| df031b8784 | |||
| 492659bcb8 | |||
| 33fee89633 |
Binary file not shown.
31
splunk/game-logic/game_manager.gd
Normal file
31
splunk/game-logic/game_manager.gd
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
extends Node
|
||||||
|
|
||||||
|
var players: Array[int] = []
|
||||||
|
|
||||||
|
var player_spawner: MultiplayerSpawner
|
||||||
|
|
||||||
|
@onready var debug_ui: PackedScene = preload("res://ui/multiplayer-debug-ui/multiplayer-debug-ui.tscn")
|
||||||
|
var debug_ui_instance
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
player_spawner = get_tree().root.get_node("Lobby/PlayerSpawner") as MultiplayerSpawner
|
||||||
|
|
||||||
|
debug_ui_instance = debug_ui.instantiate()
|
||||||
|
get_tree().root.add_child.call_deferred(debug_ui_instance)
|
||||||
|
debug_ui_instance.hide()
|
||||||
|
|
||||||
|
|
||||||
|
func _input(event: InputEvent) -> void:
|
||||||
|
if event.is_action_pressed("toggle_watch"):
|
||||||
|
debug_ui_instance.visible = !debug_ui_instance.visible
|
||||||
|
|
||||||
|
|
||||||
|
@rpc("any_peer", "call_local", "reliable")
|
||||||
|
func request_server_to_spawn_player(peer_id: int, player_name: String) -> void:
|
||||||
|
var data: Dictionary = {}
|
||||||
|
|
||||||
|
data["peer_id"] = peer_id
|
||||||
|
data["player_name"] = player_name
|
||||||
|
|
||||||
|
player_spawner.spawn(data)
|
||||||
1
splunk/game-logic/game_manager.gd.uid
Normal file
1
splunk/game-logic/game_manager.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://dsl58fvqxa6ul
|
||||||
@@ -1,12 +1,22 @@
|
|||||||
[gd_scene load_steps=10 format=3 uid="uid://bj52j4ew2lfr6"]
|
[gd_scene load_steps=11 format=3 uid="uid://bj52j4ew2lfr6"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://5vggmy1srgxb" path="res://tools/human-height-reference.tscn" id="1_yyu2g"]
|
[ext_resource type="PackedScene" uid="uid://baxlyc1rqnkh5" path="res://levels/lobby-scene/tree/tree.tscn" id="2_qjimh"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bhgahenvxqhec" path="res://levels/lobby-scene/tree/tree.blend" id="3_0u2wx"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://b5xb0fsfpn7r3" path="res://levels/lobby-scene/lobby-terrain/lobby-terrain.blend" id="3_f73ky"]
|
[ext_resource type="PackedScene" uid="uid://b5xb0fsfpn7r3" path="res://levels/lobby-scene/lobby-terrain/lobby-terrain.blend" id="3_f73ky"]
|
||||||
[ext_resource type="PackedScene" uid="uid://csmfxg011xisf" path="res://player/Player.tscn" id="4_0aw1h"]
|
[ext_resource type="Script" uid="uid://bbhx0fwgcgjr4" path="res://networking/player_spawner.gd" id="3_qjimh"]
|
||||||
[ext_resource type="PackedScene" uid="uid://c4cew4af3h306" path="res://levels/lobby-scene/tent/tent.blend" id="4_qjimh"]
|
[ext_resource type="PackedScene" uid="uid://c5ww6wbm2axro" path="res://levels/lobby-scene/tent/tent.tscn" id="4_qjimh"]
|
||||||
[ext_resource type="PackedScene" uid="uid://wcsd1tb0quj3" path="res://levels/lobby-scene/campfire/campfire.tscn" id="5_qjimh"]
|
[ext_resource type="PackedScene" uid="uid://wcsd1tb0quj3" path="res://levels/lobby-scene/campfire/campfire.tscn" id="5_qjimh"]
|
||||||
|
|
||||||
|
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_qjimh"]
|
||||||
|
properties/0/path = NodePath("WorldEnvironment/DirectionalLight3D:rotation")
|
||||||
|
properties/0/spawn = true
|
||||||
|
properties/0/replication_mode = 2
|
||||||
|
properties/1/path = NodePath("WorldEnvironment/DirectionalLight3D:light_color")
|
||||||
|
properties/1/spawn = true
|
||||||
|
properties/1/replication_mode = 2
|
||||||
|
properties/2/path = NodePath("WorldEnvironment/DirectionalLight3D:light_energy")
|
||||||
|
properties/2/spawn = true
|
||||||
|
properties/2/replication_mode = 2
|
||||||
|
|
||||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_f73ky"]
|
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_f73ky"]
|
||||||
|
|
||||||
[sub_resource type="Sky" id="Sky_0aw1h"]
|
[sub_resource type="Sky" id="Sky_0aw1h"]
|
||||||
@@ -22,36 +32,333 @@ glow_enabled = true
|
|||||||
volumetric_fog_enabled = true
|
volumetric_fog_enabled = true
|
||||||
volumetric_fog_density = 0.0
|
volumetric_fog_density = 0.0
|
||||||
|
|
||||||
|
[sub_resource type="FogMaterial" id="FogMaterial_qjimh"]
|
||||||
|
density = 0.05
|
||||||
|
albedo = Color(0.71539, 0.628132, 0.473352, 1)
|
||||||
|
height_falloff = 1e-05
|
||||||
|
|
||||||
[node name="Lobby" type="Node3D"]
|
[node name="Lobby" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
||||||
|
replication_config = SubResource("SceneReplicationConfig_qjimh")
|
||||||
|
|
||||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
environment = SubResource("Environment_72fkp")
|
environment = SubResource("Environment_72fkp")
|
||||||
|
|
||||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="WorldEnvironment"]
|
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="WorldEnvironment"]
|
||||||
transform = Transform3D(0.915754, 0.29917, -0.268128, 0.115653, 0.442845, 0.889108, 0.384733, -0.845214, 0.370937, 0, 0, 0)
|
transform = Transform3D(0.917663, -0.182505, -0.352967, 0.227411, 0.969643, 0.0898726, 0.32585, -0.162741, 0.931309, 0, 0, 0)
|
||||||
|
light_color = Color(0.71539, 0.628132, 0.473352, 1)
|
||||||
|
light_energy = 3.435
|
||||||
|
light_volumetric_fog_energy = 2.0
|
||||||
shadow_enabled = true
|
shadow_enabled = true
|
||||||
shadow_transmittance_bias = 5.628
|
shadow_transmittance_bias = 5.628
|
||||||
|
|
||||||
[node name="Human-height-reference" parent="." instance=ExtResource("1_yyu2g")]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.33741, 0.953, -5.00694)
|
|
||||||
|
|
||||||
[node name="lobby-terrain" parent="." instance=ExtResource("3_f73ky")]
|
[node name="lobby-terrain" parent="." instance=ExtResource("3_f73ky")]
|
||||||
|
|
||||||
[node name="Node3D" type="Node3D" parent="lobby-terrain"]
|
[node name="Tree" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.1286, 0, 0.918179)
|
||||||
|
|
||||||
[node name="tree" parent="lobby-terrain/Node3D" instance=ExtResource("3_0u2wx")]
|
[node name="Tree2" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.47232, 0, -12.0981)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.48594, 0, -21.9149)
|
||||||
|
|
||||||
[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="."]
|
[node name="Tree3" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 34.9316, 0, -26.9708)
|
||||||
|
|
||||||
|
[node name="Tree4" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 39.9316, 0, 6.02919)
|
||||||
|
|
||||||
|
[node name="Tree5" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21.9316, 0, -12.9708)
|
||||||
|
|
||||||
|
[node name="Tree6" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8.06842, 0, 11.0292)
|
||||||
|
|
||||||
|
[node name="Tree7" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.611513, 0, 0.791234, 0, 1, 0, -0.791234, 0, 0.611513, -52.7514, 0, -25.6344)
|
||||||
|
|
||||||
|
[node name="Tree8" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.611513, 0, 0.791234, 0, 1, 0, -0.791234, 0, 0.611513, -84.2187, 0, -37.0667)
|
||||||
|
|
||||||
|
[node name="Tree9" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.611513, 0, 0.791234, 0, 1, 0, -0.791234, 0, 0.611513, -60.2623, 0, -61.5226)
|
||||||
|
|
||||||
|
[node name="Tree10" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.611513, 0, 0.791234, 0, 1, 0, -0.791234, 0, 0.611513, -31.094, 0, -45.2988)
|
||||||
|
|
||||||
|
[node name="Tree11" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.611513, 0, 0.791234, 0, 1, 0, -0.791234, 0, 0.611513, -57.1347, 0, -42.6753)
|
||||||
|
|
||||||
|
[node name="Tree12" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.611513, 0, 0.791234, 0, 1, 0, -0.791234, 0, 0.611513, -56.4904, 0, -4.26199)
|
||||||
|
|
||||||
|
[node name="Tree13" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.122129, 0, 0.992514, 0, 1, 0, -0.992514, 0, -0.122129, 12.3259, 0, -50.3651)
|
||||||
|
|
||||||
|
[node name="Tree14" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.122129, 0, 0.992514, 0, 1, 0, -0.992514, 0, -0.122129, -12.7043, 0, -30.1653)
|
||||||
|
|
||||||
|
[node name="Tree15" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.122129, 0, 0.992514, 0, 1, 0, -0.992514, 0, -0.122129, -18.2613, 0, -70.5838)
|
||||||
|
|
||||||
|
[node name="Tree16" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.122129, 0, 0.992514, 0, 1, 0, -0.992514, 0, -0.122129, 13.881, 0, -79.5766)
|
||||||
|
|
||||||
|
[node name="Tree17" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.122129, 0, 0.992514, 0, 1, 0, -0.992514, 0, -0.122129, -2.77846, 0, -59.3909)
|
||||||
|
|
||||||
|
[node name="Tree18" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.122129, 0, 0.992514, 0, 1, 0, -0.992514, 0, -0.122129, 24.7058, 0, -32.5466)
|
||||||
|
|
||||||
|
[node name="Tree19" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.424468, 0, -0.905443, 0, 1, 0, 0.905443, 0, -0.424468, -73.4507, 0, 61.208)
|
||||||
|
|
||||||
|
[node name="Tree20" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.424468, 0, -0.905443, 0, 1, 0, 0.905443, 0, -0.424468, -40.2487, 0, 65.511)
|
||||||
|
|
||||||
|
[node name="Tree21" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.424468, 0, -0.905443, 0, 1, 0, 0.905443, 0, -0.424468, -58.3024, 0, 94.5982)
|
||||||
|
|
||||||
|
[node name="Tree22" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.424468, 0, -0.905443, 0, 1, 0, 0.905443, 0, -0.424468, -90.3043, 0, 85.1179)
|
||||||
|
|
||||||
|
[node name="Tree23" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.424468, 0, -0.905443, 0, 1, 0, 0.905443, 0, -0.424468, -65.4605, 0, 76.8849)
|
||||||
|
|
||||||
|
[node name="Tree24" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.424468, 0, -0.905443, 0, 1, 0, 0.905443, 0, -0.424468, -74.4571, 0, 39.5343)
|
||||||
|
|
||||||
|
[node name="Tree25" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.456849, 0, -0.889544, 0, 1, 0, 0.889544, 0, 0.456849, -22.2938, 0, 14.639)
|
||||||
|
|
||||||
|
[node name="Tree26" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.456849, 0, -0.889544, 0, 1, 0, 0.889544, 0, 0.456849, 5.24282, 0.333068, -22.3762)
|
||||||
|
|
||||||
|
[node name="Tree27" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.456849, 0, -0.889544, 0, 1, 0, 0.889544, 0, 0.456849, 13.389, 0, 23.0717)
|
||||||
|
|
||||||
|
[node name="Tree28" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.456849, 0, -0.889544, 0, 1, 0, 0.889544, 0, 0.456849, -13.6817, 12.3126, 37.5975)
|
||||||
|
|
||||||
|
[node name="Tree29" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.456849, 0, -0.889544, 0, 1, 0, 0.889544, 0, 0.456849, -5.00365, 0, 17.9035)
|
||||||
|
|
||||||
|
[node name="Tree30" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.456849, 0, -0.889544, 0, 1, 0, 0.889544, 0, 0.456849, -40.0582, 0, 2.18158)
|
||||||
|
|
||||||
|
[node name="Tree31" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.950505, 0, -0.31071, 0, 1, 0, 0.31071, 0, 0.950505, -27.5248, 0, 84.0602)
|
||||||
|
|
||||||
|
[node name="Tree32" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.950505, 0, -0.31071, 0, 1, 0, 0.31071, 0, 0.950505, -27.309, 0, 50.5812)
|
||||||
|
|
||||||
|
[node name="Tree33" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.950505, 0, -0.31071, 0, 1, 0, 0.31071, 0, 0.950505, 3.76537, 0, 64.9473)
|
||||||
|
|
||||||
|
[node name="Tree34" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.950505, 0, -0.31071, 0, 1, 0, 0.31071, 0, 0.950505, -1.73554, 0, 97.8675)
|
||||||
|
|
||||||
|
[node name="Tree35" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.950505, 0, -0.31071, 0, 1, 0, 0.31071, 0, 0.950505, -12.9411, 0, 74.2152)
|
||||||
|
|
||||||
|
[node name="Tree36" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.950505, 0, -0.31071, 0, 1, 0, 0.31071, 0, 0.950505, -48.9133, 0, 87.706)
|
||||||
|
|
||||||
|
[node name="Tree37" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.958462, 0, 0.28522, 0, 1, 0, -0.28522, 0, -0.958462, -68.895, 0, -38.1058)
|
||||||
|
|
||||||
|
[node name="Tree38" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.958462, 0, 0.28522, 0, 1, 0, -0.28522, 0, -0.958462, -68.2169, 0, -4.63298)
|
||||||
|
|
||||||
|
[node name="Tree39" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.958462, 0, 0.28522, 0, 1, 0, -0.28522, 0, -0.958462, -99.6637, 0, -18.1643)
|
||||||
|
|
||||||
|
[node name="Tree40" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.958462, 0, 0.28522, 0, 1, 0, -0.28522, 0, -0.958462, -95.0437, 0, -51.2197)
|
||||||
|
|
||||||
|
[node name="Tree41" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.958462, 0, 0.28522, 0, 1, 0, -0.28522, 0, -0.958462, -83.2106, 0, -27.8749)
|
||||||
|
|
||||||
|
[node name="Tree42" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.958462, 0, 0.28522, 0, 1, 0, -0.28522, 0, -0.958462, -47.6115, 0, -42.3214)
|
||||||
|
|
||||||
|
[node name="Tree43" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.811788, 0, -0.583952, 0, 1, 0, 0.583952, 0, -0.811788, -15.2417, 0, 5.56369)
|
||||||
|
|
||||||
|
[node name="Tree44" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.811788, 0, -0.583952, 0, 1, 0, 0.583952, 0, -0.811788, 2.89171, 5.28237, 42.2972)
|
||||||
|
|
||||||
|
[node name="Tree45" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.811788, 0, -0.583952, 0, 1, 0, 0.583952, 0, -0.811788, -18.2788, 0, 42.1034)
|
||||||
|
|
||||||
|
[node name="Tree46" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.811788, 0, -0.583952, 0, 1, 0, 0.583952, 0, -0.811788, -41.6082, 0, 18.2342)
|
||||||
|
|
||||||
|
[node name="Tree47" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.811788, 0, -0.583952, 0, 1, 0, 0.583952, 0, -0.811788, -15.9009, 0, 23.147)
|
||||||
|
|
||||||
|
[node name="Tree48" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.811788, 0, -0.583952, 0, 1, 0, 0.583952, 0, -0.811788, -5.56213, 0, -13.8545)
|
||||||
|
|
||||||
|
[node name="Tree49" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.166029, 0, -0.986121, 0, 1, 0, 0.986121, 0, -0.166029, -84.6695, 0, 10.7058)
|
||||||
|
|
||||||
|
[node name="Tree50" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.166029, 0, -0.986121, 0, 1, 0, 0.986121, 0, -0.166029, -51.5301, 0, 5.94477)
|
||||||
|
|
||||||
|
[node name="Tree51" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.166029, 0, -0.986121, 0, 1, 0, 0.986121, 0, -0.166029, -61.1196, 0, 38.8088)
|
||||||
|
|
||||||
|
[node name="Tree52" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.166029, 0, -0.986121, 0, 1, 0, 0.986121, 0, -0.166029, -94.4917, 0, 38.2604)
|
||||||
|
|
||||||
|
[node name="Tree53" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.166029, 0, -0.986121, 0, 1, 0, 0.986121, 0, -0.166029, -72.7669, 0, 23.6648)
|
||||||
|
|
||||||
|
[node name="Tree54" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.166029, 0, -0.986121, 0, 1, 0, 0.986121, 0, -0.166029, -91.4529, 0, -9.90353)
|
||||||
|
|
||||||
|
[node name="Tree55" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.451345, 0, 0.89235, 0, 1, 0, -0.89235, 0, 0.451345, 79.8631, 0, 23.359)
|
||||||
|
|
||||||
|
[node name="Tree56" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.451345, 0, 0.89235, 0, 1, 0, -0.89235, 0, 0.451345, 46.8045, 0, 18.0654)
|
||||||
|
|
||||||
|
[node name="Tree57" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.451345, 0, 0.89235, 0, 1, 0, -0.89235, 0, 0.451345, 65.7197, 0, -10.4691)
|
||||||
|
|
||||||
|
[node name="Tree58" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.451345, 0, 0.89235, 0, 1, 0, -0.89235, 0, 0.451345, 84.7693, 0, -0.0364418)
|
||||||
|
|
||||||
|
[node name="Tree59" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.451345, 0, 0.89235, 0, 1, 0, -0.89235, 0, 0.451345, 72.3451, 0, 7.45029)
|
||||||
|
|
||||||
|
[node name="Tree60" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.451345, 0, 0.89235, 0, 1, 0, -0.89235, 0, 0.451345, 80.2211, 0, 45.0531)
|
||||||
|
|
||||||
|
[node name="Tree61" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.430054, 0, 0.902803, 0, 1, 0, -0.902803, 0, -0.430054, 27.337, 0, 68.378)
|
||||||
|
|
||||||
|
[node name="Tree62" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.430054, 0, 0.902803, 0, 1, 0, -0.902803, 0, -0.430054, 2.93279, 0, 91.2979)
|
||||||
|
|
||||||
|
[node name="Tree63" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.430054, 0, 0.902803, 0, 1, 0, -0.902803, 0, -0.430054, -8.07783, 0, 58.8824)
|
||||||
|
|
||||||
|
[node name="Tree64" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.430054, 0, 0.902803, 0, 1, 0, -0.902803, 0, -0.430054, 19.5644, 0, 40.1766)
|
||||||
|
|
||||||
|
[node name="Tree65" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.430054, 0, 0.902803, 0, 1, 0, -0.902803, 0, -0.430054, 10.1521, 0, 64.598)
|
||||||
|
|
||||||
|
[node name="Tree66" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.430054, 0, 0.902803, 0, 1, 0, -0.902803, 0, -0.430054, 44.721, 0, 81.3608)
|
||||||
|
|
||||||
|
[node name="Tree67" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.940792, 0, 0.338984, 0, 1, 0, -0.338984, 0, -0.940792, 34.6408, 0, -0.855806)
|
||||||
|
|
||||||
|
[node name="Tree68" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.940792, 0, 0.338984, 0, 1, 0, -0.338984, 0, -0.940792, 33.4243, 0, 32.6017)
|
||||||
|
|
||||||
|
[node name="Tree69" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.940792, 0, 0.338984, 0, 1, 0, -0.338984, 0, -0.940792, 2.79329, 0, 17.3131)
|
||||||
|
|
||||||
|
[node name="Tree70" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.940792, 0, 0.338984, 0, 1, 0, -0.338984, 0, -0.940792, 9.27582, 0, -15.4279)
|
||||||
|
|
||||||
|
[node name="Tree71" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.940792, 0, 0.338984, 0, 1, 0, -0.338984, 0, -0.940792, 19.7694, 0, 8.54882)
|
||||||
|
|
||||||
|
[node name="Tree72" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(-0.940792, 0, 0.338984, 0, 1, 0, -0.338984, 0, -0.940792, 56.1288, 0, -3.86066)
|
||||||
|
|
||||||
|
[node name="Tree73" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.971063, 0, -0.238822, 0, 1, 0, 0.238822, 0, 0.971063, 6.73125, 0, 27.1375)
|
||||||
|
|
||||||
|
[node name="Tree74" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.971063, 0, -0.238822, 0, 1, 0, 0.238822, 0, 0.971063, 4.44506, 0, -6.264)
|
||||||
|
|
||||||
|
[node name="Tree75" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.971063, 0, -0.238822, 0, 1, 0, 0.238822, 0, 0.971063, 36.5059, 0, 5.74019)
|
||||||
|
|
||||||
|
[node name="Tree76" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.971063, 0, -0.238822, 0, 1, 0, 0.238822, 0, 0.971063, 33.4801, 0, 38.9794)
|
||||||
|
|
||||||
|
[node name="Tree77" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.971063, 0, -0.238822, 0, 1, 0, 0.238822, 0, 0.971063, 20.5386, 0, 16.2304)
|
||||||
|
|
||||||
|
[node name="Tree78" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.971063, 0, -0.238822, 0, 1, 0, 0.238822, 0, 0.971063, -14.325, 0, 32.3713)
|
||||||
|
|
||||||
|
[node name="Tree79" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -48.959, 0, -13.9026)
|
||||||
|
|
||||||
|
[node name="Tree80" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -76.7854, 0, -32.5192)
|
||||||
|
|
||||||
|
[node name="Tree81" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -47.6816, 0, -50.5461)
|
||||||
|
|
||||||
|
[node name="Tree82" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -25.5144, 0, -27.6785)
|
||||||
|
|
||||||
|
[node name="Tree91" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -6.96076, 0, -27.3104)
|
||||||
|
|
||||||
|
[node name="Tree92" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -19.3298, 0, -30.7708)
|
||||||
|
|
||||||
|
[node name="Tree93" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -31.2627, 0, -22.9674)
|
||||||
|
|
||||||
|
[node name="Tree94" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -31.3363, 0, -16.1939)
|
||||||
|
|
||||||
|
[node name="Tree95" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -29.4957, 0, -9.42036)
|
||||||
|
|
||||||
|
[node name="Tree96" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -17.5693, 0, -4.45112)
|
||||||
|
|
||||||
|
[node name="Tree97" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -6.45191, 0, -8.94227)
|
||||||
|
|
||||||
|
[node name="Tree98" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -2.01016, 0, -37.6058)
|
||||||
|
|
||||||
|
[node name="Tree99" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -14.8881, 0, -42.9982)
|
||||||
|
|
||||||
|
[node name="Tree83" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -49.1457, 0, -31.4973)
|
||||||
|
|
||||||
|
[node name="Tree84" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.782782, 0, 0.622296, 0, 1, 0, -0.622296, 0, 0.782782, -57.694, 0, 5.95833)
|
||||||
|
|
||||||
|
[node name="Tree85" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.118439, 0, 0.992961, 0, 1, 0, -0.992961, 0, 0.118439, 20.1415, 0, -22.3759)
|
||||||
|
|
||||||
|
[node name="Tree86" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.118439, 0, 0.992961, 0, 1, 0, -0.992961, 0, 0.118439, -24.3894, 0, -5.41777)
|
||||||
|
|
||||||
|
[node name="Tree87" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.118439, 0, 0.992961, 0, 1, 0, -0.992961, 0, 0.118439, -4.73205, 0, -49.3144)
|
||||||
|
|
||||||
|
[node name="Tree88" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.118439, 0, 0.992961, 0, 1, 0, -0.992961, 0, 0.118439, 28.6279, 0, -50.3707)
|
||||||
|
|
||||||
|
[node name="Tree89" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.118439, 0, 0.992961, 0, 1, 0, -0.992961, 0, 0.118439, 7.6297, 0, -34.7478)
|
||||||
|
|
||||||
|
[node name="Tree90" parent="lobby-terrain" instance=ExtResource("2_qjimh")]
|
||||||
|
transform = Transform3D(0.118439, 0, 0.992961, 0, 1, 0, -0.992961, 0, 0.118439, 27.9076, 0, -2.11639)
|
||||||
|
|
||||||
|
[node name="PlayerSpawner" type="MultiplayerSpawner" parent="."]
|
||||||
_spawnable_scenes = PackedStringArray("uid://csmfxg011xisf")
|
_spawnable_scenes = PackedStringArray("uid://csmfxg011xisf")
|
||||||
spawn_path = NodePath("../Marker3D")
|
spawn_path = NodePath("../Marker3D")
|
||||||
spawn_limit = 1
|
script = ExtResource("3_qjimh")
|
||||||
|
|
||||||
[node name="Marker3D" type="Marker3D" parent="."]
|
[node name="Marker3D" type="Marker3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.269072, -8.35164)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -13.1053, 1.29751, -14.168)
|
||||||
|
|
||||||
[node name="Player" parent="." instance=ExtResource("4_0aw1h")]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.444747, 0.992996, -4.71496)
|
|
||||||
|
|
||||||
[node name="Campsite" type="Node3D" parent="."]
|
[node name="Campsite" type="Node3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.724, 0, -17.6721)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.724, 0, -17.6721)
|
||||||
@@ -59,22 +366,27 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.724, 0, -17.6721)
|
|||||||
[node name="TentPlot1" type="Marker3D" parent="Campsite"]
|
[node name="TentPlot1" type="Marker3D" parent="Campsite"]
|
||||||
transform = Transform3D(-0.998887, 0, -0.0471587, 0, 1, 0, 0.0471587, 0, -0.998887, -0.468871, 0.334599, -6.31805)
|
transform = Transform3D(-0.998887, 0, -0.0471587, 0, 1, 0, 0.0471587, 0, -0.998887, -0.468871, 0.334599, -6.31805)
|
||||||
|
|
||||||
[node name="tent" parent="Campsite/TentPlot1" instance=ExtResource("4_qjimh")]
|
[node name="Tent" parent="Campsite/TentPlot1" instance=ExtResource("4_qjimh")]
|
||||||
|
|
||||||
[node name="TentPlot2" type="Marker3D" parent="Campsite"]
|
[node name="TentPlot2" type="Marker3D" parent="Campsite"]
|
||||||
transform = Transform3D(-0.240973, 0, -0.970532, 0, 1, 0, 0.970532, 0, -0.240973, -6.46887, 0.334599, -2.31805)
|
transform = Transform3D(-0.240973, 0, -0.970532, 0, 1, 0, 0.970532, 0, -0.240973, -6.46887, 0.334599, -2.31805)
|
||||||
|
|
||||||
[node name="tent" parent="Campsite/TentPlot2" instance=ExtResource("4_qjimh")]
|
[node name="Tent" parent="Campsite/TentPlot2" instance=ExtResource("4_qjimh")]
|
||||||
|
|
||||||
[node name="TentPlot3" type="Marker3D" parent="Campsite"]
|
[node name="TentPlot3" type="Marker3D" parent="Campsite"]
|
||||||
transform = Transform3D(0.689594, 0, -0.724196, 0, 1, 0, 0.724196, 0, 0.689594, -4.46887, 0.334599, 4.68195)
|
transform = Transform3D(0.689594, 0, -0.724196, 0, 1, 0, 0.724196, 0, 0.689594, -4.46887, 0.334599, 4.68195)
|
||||||
|
|
||||||
[node name="tent" parent="Campsite/TentPlot3" instance=ExtResource("4_qjimh")]
|
[node name="Tent" parent="Campsite/TentPlot3" instance=ExtResource("4_qjimh")]
|
||||||
|
|
||||||
[node name="TentPlot4" type="Marker3D" parent="Campsite"]
|
[node name="TentPlot4" type="Marker3D" parent="Campsite"]
|
||||||
transform = Transform3D(-0.0217975, 0, 0.999762, 0, 1, 0, -0.999762, 0, -0.0217975, 6.53113, 0.334599, -2.31805)
|
transform = Transform3D(-0.0217975, 0, 0.999762, 0, 1, 0, -0.999762, 0, -0.0217975, 6.53113, 0.334599, -2.31805)
|
||||||
|
|
||||||
[node name="tent" parent="Campsite/TentPlot4" instance=ExtResource("4_qjimh")]
|
[node name="Tent" parent="Campsite/TentPlot4" instance=ExtResource("4_qjimh")]
|
||||||
|
|
||||||
[node name="Campfire" parent="Campsite" instance=ExtResource("5_qjimh")]
|
[node name="Campfire" parent="Campsite" instance=ExtResource("5_qjimh")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.392361, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.392361, 0)
|
||||||
|
|
||||||
|
[node name="FogVolume" type="FogVolume" parent="."]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.07413, 6.02039, -11.3029)
|
||||||
|
size = Vector3(393.422, 76.9358, 405.889)
|
||||||
|
material = SubResource("FogMaterial_qjimh")
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
23
splunk/levels/lobby-scene/tent/tent.tscn
Normal file
23
splunk/levels/lobby-scene/tent/tent.tscn
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
[gd_scene load_steps=4 format=3 uid="uid://c5ww6wbm2axro"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://c4cew4af3h306" path="res://levels/lobby-scene/tent/tent.blend" id="1_bey51"]
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_6ocyw"]
|
||||||
|
size = Vector3(3.39648, 0.105957, 4.00098)
|
||||||
|
|
||||||
|
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_bey51"]
|
||||||
|
data = PackedVector3Array(1, -1, -1.4167, 1.0131, -0.75, -0.9922, 1.0131, -0.75, -1.3052, 1, -1, -1.4167, 1, -1, -0.9924, 1.0131, -0.75, -0.9922, 1.0131, -0.75, -1.3052, 1.0523, 0, -0.9917, 1.0262, -0.5, -1.4875, 1.0131, -0.75, -1.3052, 1.0131, -0.75, -0.9922, 1.0523, 0, -0.9917, 1.0131, -0.75, -0.9922, 1.1047, 1, 0, 1.0523, 0, -0.9917, 1, -1, -0.9924, 1.0131, -0.75, -0.8156, 1.0131, -0.75, -0.9922, 1.0915, 0.749, 0.0034, 1.0131, -0.75, -0.9922, 1.0131, -0.75, -0.8156, 1.1047, 1, 0, 1.0131, -0.75, -0.9922, 1.0915, 0.749, 0.0034, 1, -1, -0.9924, 1.0131, -0.75, 0.8012, 1.0131, -0.75, -0.8156, 1.0131, -0.75, 0.8012, 1, -1, -0.9924, 1, -1, 0, 1.0131, -0.75, 0.8012, 1, -1, 0, 1, -1, 0.9909, 1.0131, -0.75, 0.9911, 1.0915, 0.749, 0.0034, 1.0131, -0.75, 0.8012, 1.1047, 1, 0, 1.0915, 0.749, 0.0034, 1.0131, -0.75, 0.9911, 1.0131, -0.75, 0.8012, 1, -1, 0.9909, 1.0131, -0.75, 0.9911, 1.0131, -0.75, 0.9911, 1, -1, 0.9909, 1, -1, 1.4166, 1.1047, 1, 0, 1.0131, -0.75, 0.9911, 1.0523, 0, 0.9916, 1.0131, -0.75, 0.9911, 1, -1, 1.4166, 1.0131, -0.75, 1.3051, 1.0523, 0, 0.9916, 1.0131, -0.75, 0.9911, 1.0131, -0.75, 1.3051, 1.0523, 0, 0.9916, 1.0131, -0.75, 1.3051, 1.0262, -0.5, 1.4875, -1.0131, -0.75, -1.3052, -1, -1, 0, -1, -1, -1.4167, -1.0131, -0.75, -1.3052, -1.0131, -0.75, 1.3051, -1, -1, 0, -1, -1, 0, -1.0131, -0.75, 1.3051, -1, -1, 1.4166, -1.0131, -0.75, 1.3051, -1.0131, -0.75, -1.3052, -1.0524, 0, -0.9917, -1.0524, 0, -0.9917, -1.0131, -0.75, -1.3052, -1.0262, -0.5, -1.4875, -1.0131, -0.75, 1.3051, -1.0524, 0, -0.9917, -1.0524, 0, 0.9916, -1.0524, 0, 0.9916, -1.0524, 0, -0.9917, -1.1047, 1, 0, -1.0131, -0.75, 1.3051, -1.0524, 0, 0.9916, -1.0262, -0.5, 1.4875, 1.0523, 0, 0.9916, 0, 0.9167, 0, 1.1047, 1, 0, 1.0523, 0, 0.9916, 0, -0.0417, 0.9916, 0, 0.9167, 0, -1.0524, 0, 0.9916, 0, 0.9167, 0, 0, -0.0417, 0.9916, -1.0524, 0, 0.9916, -1.1047, 1, 0, 0, 0.9167, 0, 0, -0.5208, 1.4875, -1.0524, 0, 0.9916, 0, -0.0417, 0.9916, 0, -0.5208, 1.4875, -1.0262, -0.5, 1.4875, -1.0524, 0, 0.9916, 1.0262, -0.5, 1.4875, 0, -0.0417, 0.9916, 1.0523, 0, 0.9916, 1.0262, -0.5, 1.4875, 0, -0.5208, 1.4875, 0, -0.0417, 0.9916, 1.0131, -0.75, 1.3051, 0, -0.5208, 1.4875, 1.0262, -0.5, 1.4875, 1.0131, -0.75, 1.3051, 0, -0.7604, 1.3051, 0, -0.5208, 1.4875, 0, -0.7604, -1.3052, -1, -1, -1.4167, 0, -1, -1.4167, 0, -0.7604, -1.3052, -1.0131, -0.75, -1.3052, -1, -1, -1.4167, 1.0131, -0.75, -1.3052, 0, -1, -1.4167, 1, -1, -1.4167, 1.0131, -0.75, -1.3052, 0, -0.7604, -1.3052, 0, -1, -1.4167, 0, -0.7604, -1.3052, 1.0262, -0.5, -1.4875, 0, -0.5208, -1.4875, 0, -0.7604, -1.3052, 1.0131, -0.75, -1.3052, 1.0262, -0.5, -1.4875, 0, -0.7604, -1.3052, -1.0262, -0.5, -1.4875, -1.0131, -0.75, -1.3052, 0, -0.7604, -1.3052, 0, -0.5208, -1.4875, -1.0262, -0.5, -1.4875, -1.0524, 0, -0.9917, 0, -0.5208, -1.4875, 0, -0.0417, -0.9917, -1.0524, 0, -0.9917, -1.0262, -0.5, -1.4875, 0, -0.5208, -1.4875, 1.0262, -0.5, -1.4875, 0, -0.0417, -0.9917, 0, -0.5208, -1.4875, 1.0262, -0.5, -1.4875, 1.0523, 0, -0.9917, 0, -0.0417, -0.9917, 0, -0.0417, -0.9917, 1.1047, 1, 0, 0, 0.9167, 0, 0, -0.0417, -0.9917, 1.0523, 0, -0.9917, 1.1047, 1, 0, 0, -0.0417, -0.9917, -1.1047, 1, 0, -1.0524, 0, -0.9917, 0, -0.0417, -0.9917, 0, 0.9167, 0, -1.1047, 1, 0, 0, -0.5208, 1.4875, -1.0131, -0.75, 1.3051, -1.0262, -0.5, 1.4875, 0, -0.5208, 1.4875, 0, -0.7604, 1.3051, -1.0131, -0.75, 1.3051, -1, -1, 1.4166, 0, -0.7604, 1.3051, 0, -1, 1.4166, -1, -1, 1.4166, -1.0131, -0.75, 1.3051, 0, -0.7604, 1.3051, 0, -0.7604, 1.3051, 1, -1, 1.4166, 0, -1, 1.4166, 0, -0.7604, 1.3051, 1.0131, -0.75, 1.3051, 1, -1, 1.4166, 1, -1, -0.9924, 1, -0.9917, -1.4167, 1, -1, -1.4167, 1, -1, -0.9924, 1, -0.9917, -0.9924, 1, -0.9917, -1.4167, 1, -1, 0, 1, -0.9917, -0.9924, 1, -1, -0.9924, 1, -1, 0, 1, -0.9917, 0, 1, -0.9917, -0.9924, -1, -1, -1.4167, -1, -0.9917, 0, -1, -1, 0, -1, -1, -1.4167, -1, -0.9917, -1.4167, -1, -0.9917, 0, -1, -1, 0, -1, -0.9917, 0, -1, -0.9917, 1.4166, -1, -1, 0, -1, -0.9917, 1.4166, -1, -1, 1.4166, 1, -1, -1.4167, 0, -0.9917, -1.4167, 1, -0.9917, -1.4167, 1, -1, -1.4167, 0, -1, -1.4167, 0, -0.9917, -1.4167, 0, -1, -1.4167, -1, -0.9917, -1.4167, 0, -0.9917, -1.4167, 0, -1, -1.4167, -1, -1, -1.4167, -1, -0.9917, -1.4167, 1, -1, 1.4166, 1, -0.9917, 0.9909, 1, -1, 0.9909, 1, -1, 1.4166, 1, -0.9917, 1.4166, 1, -0.9917, 0.9909, 0, -1, 1.4166, 1, -0.9917, 1.4166, 1, -1, 1.4166, 0, -1, 1.4166, 0, -0.9917, 1.4166, 1, -0.9917, 1.4166, -1, -1, 1.4166, 0, -0.9917, 1.4166, 0, -1, 1.4166, -1, -1, 1.4166, -1, -0.9917, 1.4166, 0, -0.9917, 1.4166, 1, -1, 0.9909, 1, -0.9917, 0, 1, -0.9917, 0.9909, 1, -1, 0.9909, 1, -1, 0, 1, -0.9917, 0)
|
||||||
|
|
||||||
|
[node name="Tent" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="tent" parent="." instance=ExtResource("1_bey51")]
|
||||||
|
|
||||||
|
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0397949, 0)
|
||||||
|
shape = SubResource("BoxShape3D_6ocyw")
|
||||||
|
|
||||||
|
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D"]
|
||||||
|
transform = Transform3D(3.57628e-07, 0, 1.2, 0, 1.2, 0, -2, 0, 2.14577e-07, 0, 1.2, 0)
|
||||||
|
shape = SubResource("ConcavePolygonShape3D_bey51")
|
||||||
17
splunk/levels/lobby-scene/tree/tree.tscn
Normal file
17
splunk/levels/lobby-scene/tree/tree.tscn
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://baxlyc1rqnkh5"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://bhgahenvxqhec" path="res://levels/lobby-scene/tree/tree.blend" id="1_lbkut"]
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_0o2vh"]
|
||||||
|
radius = 0.3
|
||||||
|
height = 13.6187
|
||||||
|
|
||||||
|
[node name="Tree" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="tree2" parent="." instance=ExtResource("1_lbkut")]
|
||||||
|
|
||||||
|
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6.8, 0)
|
||||||
|
shape = SubResource("CapsuleShape3D_0o2vh")
|
||||||
22
splunk/networking/player_spawner.gd
Normal file
22
splunk/networking/player_spawner.gd
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
extends MultiplayerSpawner
|
||||||
|
|
||||||
|
@onready var player_scene: PackedScene = load("res://player/Player.tscn")
|
||||||
|
|
||||||
|
|
||||||
|
func _ready() -> void:
|
||||||
|
spawn_function = spawn_player
|
||||||
|
|
||||||
|
|
||||||
|
func spawn_player(data: Dictionary) -> Player:
|
||||||
|
var new_player = player_scene.instantiate() as Player
|
||||||
|
|
||||||
|
var peer_id = str(data["peer_id"])
|
||||||
|
var player_name = str(data["player_name"])
|
||||||
|
|
||||||
|
new_player.set_multiplayer_authority(int(peer_id), true)
|
||||||
|
new_player.set_player_name(peer_id, player_name)
|
||||||
|
new_player.position = Vector3.UP
|
||||||
|
|
||||||
|
GameManager.players.append(int(peer_id))
|
||||||
|
|
||||||
|
return new_player
|
||||||
1
splunk/networking/player_spawner.gd.uid
Normal file
1
splunk/networking/player_spawner.gd.uid
Normal file
@@ -0,0 +1 @@
|
|||||||
|
uid://bbhx0fwgcgjr4
|
||||||
@@ -1,15 +1,14 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
var is_owned: bool = false
|
@onready var player_scene: PackedScene = preload("res://player/Player.tscn")
|
||||||
var steam_app_id: int = 480
|
|
||||||
|
var players: Array[int] = []
|
||||||
|
|
||||||
var steam_id: int = 0
|
var steam_id: int = 0
|
||||||
var steam_username: String = ""
|
var steam_username: String = ""
|
||||||
|
var lobby_id: int = 0
|
||||||
var lobby_id = 0
|
|
||||||
var lobby_max_members = 4
|
|
||||||
var lobby_members: Array = []
|
|
||||||
|
|
||||||
var steam_initialized: bool = false
|
var steam_initialized: bool = false
|
||||||
|
var steam_app_id: int = 480
|
||||||
|
|
||||||
var peer: SteamMultiplayerPeer
|
var peer: SteamMultiplayerPeer
|
||||||
|
|
||||||
@@ -23,274 +22,149 @@ func _ready() -> void:
|
|||||||
print("!!! Steam did not initialize. Multiplayer will be disabled.")
|
print("!!! Steam did not initialize. Multiplayer will be disabled.")
|
||||||
return
|
return
|
||||||
|
|
||||||
# Connect Steam lobby signals
|
|
||||||
Steam.lobby_created.connect(_on_lobby_created)
|
Steam.lobby_created.connect(_on_lobby_created)
|
||||||
Steam.lobby_joined.connect(_on_lobby_joined)
|
Steam.lobby_joined.connect(_on_lobby_joined)
|
||||||
#Steam.lobby_match_list.connect(_on_lobby_match_list)
|
|
||||||
Steam.lobby_chat_update.connect(_on_lobby_chat_update)
|
Steam.lobby_chat_update.connect(_on_lobby_chat_update)
|
||||||
Steam.lobby_data_update.connect(_on_lobby_data_update)
|
Steam.p2p_session_request.connect(_on_p2p_session_request)
|
||||||
#Steam.join_requested.connect(_on_lobby_join_requested)
|
|
||||||
Steam.persona_state_change.connect(_on_persona_change)
|
|
||||||
|
|
||||||
# Setup multiplayer signals
|
|
||||||
multiplayer.peer_connected.connect(_on_peer_connected)
|
multiplayer.peer_connected.connect(_on_peer_connected)
|
||||||
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
|
multiplayer.peer_disconnected.connect(_on_peer_disconnected)
|
||||||
multiplayer.connected_to_server.connect(_on_connected_to_server)
|
multiplayer.connected_to_server.connect(_on_connected_to_server)
|
||||||
multiplayer.connection_failed.connect(_on_connection_failed)
|
multiplayer.connection_failed.connect(_on_connection_failed)
|
||||||
multiplayer.server_disconnected.connect(_on_server_disconnected)
|
|
||||||
Steam.p2p_session_request.connect(_on_p2p_session_request)
|
|
||||||
|
|
||||||
check_command_line()
|
check_command_line()
|
||||||
|
|
||||||
|
multiplayer.server_relay = true
|
||||||
|
|
||||||
func _on_p2p_session_request(steam_id_remote: int) -> void:
|
|
||||||
## ADDED: More detailed logging to confirm P2P acceptance.
|
|
||||||
print("[P2P] ==> Session request from: %s. Accepting." % steam_id_remote)
|
|
||||||
var accepted = Steam.acceptP2PSessionWithUser(steam_id_remote)
|
|
||||||
if not accepted:
|
|
||||||
print("[P2P] !!! Failed to accept P2P session with %s." % steam_id_remote)
|
|
||||||
|
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
## ADDED: Guard clause in case Steam fails to initialize.
|
|
||||||
if not steam_initialized:
|
if not steam_initialized:
|
||||||
return
|
return
|
||||||
|
|
||||||
Steam.run_callbacks()
|
Steam.run_callbacks()
|
||||||
|
|
||||||
if Input.is_action_just_pressed("interact"):
|
|
||||||
## ADDED: Replaced simple print with a detailed diagnostic function.
|
func create_lobby():
|
||||||
log_multiplayer_info()
|
print("[HOST] 1. Attempting to create lobby...")
|
||||||
|
Steam.createLobby(Steam.LOBBY_TYPE_FRIENDS_ONLY, 4)
|
||||||
|
|
||||||
|
|
||||||
func check_command_line() -> void:
|
func _on_lobby_created(connect: int, this_lobby_id: int):
|
||||||
var args: Array = OS.get_cmdline_args()
|
if connect != 1:
|
||||||
if args.size() > 0:
|
print("[HOST] !!! Lobby creation failed.")
|
||||||
if args[0] == "+connect_lobby":
|
return
|
||||||
if args.size() > 1 and int(args[1]) > 0:
|
|
||||||
print("Command line lobby ID: %s" % args[1])
|
lobby_id = this_lobby_id
|
||||||
join_lobby(int(args[1]))
|
print("[HOST] 2. Lobby created successfully (ID: %s)." % lobby_id)
|
||||||
|
|
||||||
|
Steam.setLobbyJoinable(lobby_id, true)
|
||||||
|
Steam.setLobbyData(lobby_id, "name", steam_username + "'s Lobby")
|
||||||
|
|
||||||
|
setup_multiplayer_peer(true)
|
||||||
|
print("[HOST] 3. Multiplayer host started (My Peer ID is always 1).")
|
||||||
|
|
||||||
|
#players.append(peer.get)
|
||||||
|
GameManager.request_server_to_spawn_player.rpc_id(1, 1, steam_username)
|
||||||
|
|
||||||
|
|
||||||
|
func join_lobby(this_lobby_id: int):
|
||||||
|
print("[CLIENT] 1. Attempting to join lobby (ID: %s)..." % this_lobby_id)
|
||||||
|
Steam.joinLobby(this_lobby_id)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_lobby_joined(this_lobby_id: int, _p, _l, response: int):
|
||||||
|
if response != Steam.CHAT_ROOM_ENTER_RESPONSE_SUCCESS:
|
||||||
|
print("[CLIENT] !!! Failed to join lobby: %s" % get_join_fail_reason(response))
|
||||||
|
return
|
||||||
|
|
||||||
|
lobby_id = this_lobby_id
|
||||||
|
print("[CLIENT] 2. Successfully joined Steam lobby.")
|
||||||
|
|
||||||
|
if Steam.getLobbyOwner(lobby_id) != steam_id:
|
||||||
|
print("[CLIENT] 3. I am a client, creating multiplayer peer to connect to host.")
|
||||||
|
setup_multiplayer_peer(false)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_connected_to_server():
|
||||||
|
print("[CLIENT] 4. Successfully connected to host's multiplayer peer.")
|
||||||
|
print("[CLIENT] 5. Sending my info to the server for registration...")
|
||||||
|
GameManager.request_server_to_spawn_player.rpc_id(1, multiplayer.get_unique_id(), steam_username)
|
||||||
|
|
||||||
|
|
||||||
|
func _on_p2p_session_request(steam_id_remote: int) -> void:
|
||||||
|
print("[P2P] ==> Session request from: %s. Accepting." % steam_id_remote)
|
||||||
|
Steam.acceptP2PSessionWithUser(steam_id_remote)
|
||||||
|
|
||||||
|
|
||||||
func init_steam() -> bool:
|
func init_steam() -> bool:
|
||||||
var response: Dictionary = Steam.steamInitEx()
|
var response: Dictionary = Steam.steamInitEx()
|
||||||
print("Steam init response: %s " % response)
|
|
||||||
|
|
||||||
if response['status'] > 0:
|
if response['status'] > 0:
|
||||||
print("!!! Failed to init steam! Code: %s " % response)
|
print("!!! Failed to init steam! Code: %s " % response)
|
||||||
return false
|
return false
|
||||||
|
|
||||||
is_owned = Steam.isSubscribed()
|
|
||||||
steam_id = Steam.getSteamID()
|
steam_id = Steam.getSteamID()
|
||||||
steam_username = Steam.getPersonaName()
|
steam_username = Steam.getPersonaName()
|
||||||
|
|
||||||
print("Steam initialized successfully for %s (ID: %s)." % [steam_username, steam_id])
|
print("Steam initialized successfully for %s (ID: %s)." % [steam_username, steam_id])
|
||||||
|
|
||||||
if !is_owned:
|
|
||||||
print("!!! WARNING: Steam reports you do not own App ID %s." % steam_app_id)
|
|
||||||
# You might want to return false here in a real game
|
|
||||||
# return false
|
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
|
||||||
|
|
||||||
func setup_multiplayer_peer(is_host: bool = false) -> void:
|
func setup_multiplayer_peer(is_host: bool = false) -> void:
|
||||||
## ADDED: Check if a peer is already active before creating a new one.
|
|
||||||
if multiplayer.multiplayer_peer and multiplayer.multiplayer_peer.get_connection_status() != MultiplayerPeer.CONNECTION_DISCONNECTED:
|
if multiplayer.multiplayer_peer and multiplayer.multiplayer_peer.get_connection_status() != MultiplayerPeer.CONNECTION_DISCONNECTED:
|
||||||
print("[Multiplayer] Peer already exists. Disconnecting old one.")
|
|
||||||
multiplayer.multiplayer_peer.close()
|
multiplayer.multiplayer_peer.close()
|
||||||
|
|
||||||
peer = SteamMultiplayerPeer.new()
|
peer = SteamMultiplayerPeer.new()
|
||||||
|
|
||||||
if is_host:
|
if is_host:
|
||||||
print("[Multiplayer] Creating Host...")
|
peer.create_host(0)
|
||||||
var err = peer.create_host(0) ## REMOVED: Channel is handled by the peer automatically now.
|
|
||||||
if err != OK:
|
|
||||||
print("[Multiplayer] !!! Failed to create host. Error: %s" % err)
|
|
||||||
return
|
|
||||||
|
|
||||||
multiplayer.multiplayer_peer = peer
|
|
||||||
print("[Multiplayer] Host created successfully. My Peer ID: %s" % multiplayer.get_unique_id())
|
|
||||||
else:
|
else:
|
||||||
if lobby_id == 0:
|
|
||||||
print("[Multiplayer] !!! Cannot create client, not in a lobby.")
|
|
||||||
return
|
|
||||||
|
|
||||||
var host_id = Steam.getLobbyOwner(lobby_id)
|
var host_id = Steam.getLobbyOwner(lobby_id)
|
||||||
print("[Multiplayer] Creating Client, attempting to connect to host: %s" % host_id)
|
peer.create_client(host_id, 0)
|
||||||
var err = peer.create_client(host_id, 0) ## REMOVED: Channel is handled by the peer automatically.
|
|
||||||
if err != OK:
|
|
||||||
print("[Multiplayer] !!! Failed to create client. Error: %s" % err)
|
|
||||||
return
|
|
||||||
|
|
||||||
multiplayer.multiplayer_peer = peer
|
multiplayer.multiplayer_peer = peer
|
||||||
print("[Multiplayer] Client peer created. Waiting for connection...")
|
|
||||||
|
|
||||||
|
|
||||||
func create_lobby():
|
func _on_peer_connected(id: int):
|
||||||
if lobby_id == 0:
|
print("[INFO] Peer %s has established a multiplayer session." % id)
|
||||||
print("Creating lobby...")
|
#players.append()
|
||||||
Steam.createLobby(Steam.LOBBY_TYPE_FRIENDS_ONLY, lobby_max_members)
|
|
||||||
|
|
||||||
|
|
||||||
func _on_lobby_created(connect: int, this_lobby_id: int):
|
func _on_peer_disconnected(id: int):
|
||||||
if connect == 1:
|
print("[INFO] Peer %s has disconnected." % id)
|
||||||
lobby_id = this_lobby_id
|
if players.has(id):
|
||||||
print("Lobby created with id `%s`" % lobby_id)
|
#players[id].queue_free()
|
||||||
|
players.erase(id)
|
||||||
Steam.setLobbyJoinable(lobby_id, true)
|
|
||||||
Steam.setLobbyData(lobby_id, "name", steam_username + "'s Lobby")
|
|
||||||
Steam.setLobbyData(lobby_id, "mode", "Splunk")
|
|
||||||
|
|
||||||
Steam.allowP2PPacketRelay(true)
|
|
||||||
setup_multiplayer_peer(true) # Setup as host
|
|
||||||
else :
|
|
||||||
print("!!! Failed to create lobby.")
|
|
||||||
|
|
||||||
|
|
||||||
func join_lobby(this_lobby_id: int):
|
func _on_connection_failed() -> void:
|
||||||
print("Attempting to join lobby: %s" % this_lobby_id)
|
print("[CLIENT] !!! Connection to the host failed.")
|
||||||
lobby_members.clear()
|
|
||||||
Steam.joinLobby(this_lobby_id)
|
|
||||||
|
|
||||||
|
|
||||||
func _on_lobby_joined(this_lobby_id: int, permissions: int, locked: bool, response: int):
|
func _on_lobby_chat_update(_l_id, user_changed_id: int, _u_m_c_id, chat_state: int):
|
||||||
if response == Steam.CHAT_ROOM_ENTER_RESPONSE_SUCCESS:
|
|
||||||
lobby_id = this_lobby_id
|
|
||||||
print("Successfully joined lobby: %s" % lobby_id)
|
|
||||||
get_lobby_members()
|
|
||||||
|
|
||||||
# FIXED: Use Steam.getLobbyOwner() to determine if we should be host or client
|
|
||||||
var lobby_owner_id = Steam.getLobbyOwner(lobby_id)
|
|
||||||
var am_i_owner = (lobby_owner_id == steam_id)
|
|
||||||
|
|
||||||
print("[Multiplayer] Lobby Owner: %s, My Steam ID: %s, Am I Owner?: %s" % [lobby_owner_id, steam_id, am_i_owner])
|
|
||||||
|
|
||||||
if not am_i_owner:
|
|
||||||
print("[Multiplayer] I am not the lobby owner, setting up as client...")
|
|
||||||
setup_multiplayer_peer(false) # Setup as client
|
|
||||||
else:
|
|
||||||
print("[Multiplayer] I am the lobby owner, but multiplayer peer should already be set up as host.")
|
|
||||||
else:
|
|
||||||
## ADDED: Log the specific reason for the join failure.
|
|
||||||
print("!!! Failed to join lobby. Reason: %s" % get_join_fail_reason(response))
|
|
||||||
|
|
||||||
|
|
||||||
func get_lobby_members() -> void:
|
|
||||||
lobby_members.clear()
|
|
||||||
if lobby_id == 0: return
|
|
||||||
|
|
||||||
var num_members = Steam.getNumLobbyMembers(lobby_id)
|
|
||||||
print("--- Refreshing Lobby Members (%s) ---" % num_members)
|
|
||||||
for i in range(num_members):
|
|
||||||
var member_id = Steam.getLobbyMemberByIndex(lobby_id, i)
|
|
||||||
var member_name = Steam.getFriendPersonaName(member_id)
|
|
||||||
lobby_members.append({
|
|
||||||
"steam_id": member_id,
|
|
||||||
"steam_name": member_name
|
|
||||||
})
|
|
||||||
print(" - %s (%s)" % [member_name, member_id])
|
|
||||||
print("---------------------------------")
|
|
||||||
|
|
||||||
|
|
||||||
func _on_lobby_data_update(lobby: int, user: int, success: int) -> void:
|
|
||||||
if success:
|
|
||||||
if lobby == user:
|
|
||||||
print("Lobby data for lobby %s has been updated." % lobby)
|
|
||||||
var lobby_name = Steam.getLobbyData(lobby, "name")
|
|
||||||
print(" > New lobby name: %s" % lobby_name)
|
|
||||||
else:
|
|
||||||
print("Data for member %s in lobby %s has been updated." % [user, lobby])
|
|
||||||
|
|
||||||
|
|
||||||
func _on_persona_change(steam_id_changed: int, flag: int) -> void:
|
|
||||||
# This can be spammy, but useful for debugging name changes.
|
|
||||||
# print("Persona state changed for %s. Refreshing lobby members." % steam_id_changed)
|
|
||||||
get_lobby_members()
|
|
||||||
|
|
||||||
|
|
||||||
func leave_lobby() -> void:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
func _on_lobby_chat_update(lobby_id_update: int, user_changed_id: int, user_making_change_id: int, chat_state: int):
|
|
||||||
var state_string = "UNKNOWN"
|
var state_string = "UNKNOWN"
|
||||||
match chat_state:
|
match chat_state:
|
||||||
Steam.CHAT_MEMBER_STATE_CHANGE_ENTERED: state_string = "ENTERED"
|
Steam.CHAT_MEMBER_STATE_CHANGE_ENTERED: state_string = "ENTERED"
|
||||||
Steam.CHAT_MEMBER_STATE_CHANGE_LEFT: state_string = "LEFT"
|
Steam.CHAT_MEMBER_STATE_CHANGE_LEFT: state_string = "LEFT"
|
||||||
Steam.CHAT_MEMBER_STATE_CHANGE_DISCONNECTED: state_string = "DISCONNECTED"
|
Steam.CHAT_MEMBER_STATE_CHANGE_DISCONNECTED: state_string = "DISCONNECTED"
|
||||||
Steam.CHAT_MEMBER_STATE_CHANGE_KICKED: state_string = "KICKED"
|
print("[LOBBY INFO] User %s has %s the lobby." % [user_changed_id, state_string])
|
||||||
Steam.CHAT_MEMBER_STATE_CHANGE_BANNED: state_string = "BANNED"
|
|
||||||
|
|
||||||
print("[Lobby] Chat Update: User %s has %s." % [user_changed_id, state_string])
|
|
||||||
|
|
||||||
# Any change in lobby membership should trigger a refresh.
|
|
||||||
get_lobby_members()
|
|
||||||
|
|
||||||
|
|
||||||
func _on_peer_connected(id: int) -> void:
|
func check_command_line() -> void:
|
||||||
print("[Multiplayer] ✅ Peer connected: %s" % id)
|
var args: Array = OS.get_cmdline_args()
|
||||||
# It's good practice to re-check lobby members when a peer connects successfully.
|
if args.size() > 1 and args[0] == "+connect_lobby":
|
||||||
get_lobby_members()
|
if int(args[1]) > 0:
|
||||||
|
print("[CMD] Command line join request for lobby ID: %s" % args[1])
|
||||||
func _on_peer_disconnected(id: int) -> void:
|
join_lobby(int(args[1]))
|
||||||
print("[Multiplayer] ❌ Peer disconnected: %s" % id)
|
|
||||||
|
|
||||||
func _on_connected_to_server() -> void:
|
|
||||||
print("[Multiplayer] ✅ Successfully connected to the host.")
|
|
||||||
print("[Multiplayer] - My Peer ID is now: %s" % multiplayer.get_unique_id())
|
|
||||||
|
|
||||||
func _on_connection_failed() -> void:
|
|
||||||
print("[Multiplayer] ❌ Connection to the host failed.")
|
|
||||||
|
|
||||||
func _on_server_disconnected() -> void:
|
|
||||||
print("[Multiplayer] ❌ Disconnected from the host.")
|
|
||||||
|
|
||||||
|
|
||||||
## ADDED: New function to log all relevant multiplayer and lobby information.
|
|
||||||
func log_multiplayer_info():
|
|
||||||
print("\n--- DIAGNOSTIC INFO ---")
|
|
||||||
print("## Multiplayer Status:")
|
|
||||||
if multiplayer.multiplayer_peer:
|
|
||||||
print(" - Peer State: Active")
|
|
||||||
print(" - Connection Status: %s" % get_connection_status_string(multiplayer.multiplayer_peer.get_connection_status()))
|
|
||||||
print(" - Is Server?: %s" % multiplayer.is_server())
|
|
||||||
print(" - My Peer ID: %s" % multiplayer.get_unique_id())
|
|
||||||
print(" - Connected Peer IDs: %s" % multiplayer.get_peers())
|
|
||||||
else:
|
|
||||||
print(" - Peer State: Inactive (null)")
|
|
||||||
|
|
||||||
print("\n## Steam Lobby Info:")
|
|
||||||
print(" - In Lobby?: %s" % (lobby_id != 0))
|
|
||||||
print(" - Lobby ID: %s" % lobby_id)
|
|
||||||
if lobby_id != 0:
|
|
||||||
print(" - Lobby Owner Steam ID: %s" % Steam.getLobbyOwner(lobby_id))
|
|
||||||
print(" - My Steam ID: %s" % steam_id)
|
|
||||||
print(" - Lobby Members Array (%s):" % lobby_members.size())
|
|
||||||
for member in lobby_members:
|
|
||||||
print(" - %s (%s)" % [member.steam_name, member.steam_id])
|
|
||||||
print("-------------------------\n")
|
|
||||||
|
|
||||||
|
|
||||||
## ADDED: Helper function to get a human-readable string for connection status.
|
|
||||||
func get_connection_status_string(status: int) -> String:
|
|
||||||
match status:
|
|
||||||
MultiplayerPeer.CONNECTION_DISCONNECTED: return "Disconnected"
|
|
||||||
MultiplayerPeer.CONNECTION_CONNECTING: return "Connecting"
|
|
||||||
MultiplayerPeer.CONNECTION_CONNECTED: return "Connected"
|
|
||||||
_: return "Unknown Status"
|
|
||||||
|
|
||||||
|
|
||||||
func get_join_fail_reason(response: int) -> String:
|
func get_join_fail_reason(response: int) -> String:
|
||||||
match response:
|
match response:
|
||||||
Steam.CHAT_ROOM_ENTER_RESPONSE_DOESNT_EXIST: return "Lobby no longer exists"
|
1: return "Doesnt Exist"
|
||||||
Steam.CHAT_ROOM_ENTER_RESPONSE_NOT_ALLOWED: return "Not allowed to join"
|
2: return "Not Allowed"
|
||||||
Steam.CHAT_ROOM_ENTER_RESPONSE_FULL: return "Lobby is full"
|
3: return "Full"
|
||||||
Steam.CHAT_ROOM_ENTER_RESPONSE_ERROR: return "Unknown error"
|
4: return "Error"
|
||||||
Steam.CHAT_ROOM_ENTER_RESPONSE_BANNED: return "You are banned"
|
5: return "Banned"
|
||||||
Steam.CHAT_ROOM_ENTER_RESPONSE_LIMITED: return "Limited account"
|
6: return "Limited"
|
||||||
Steam.CHAT_ROOM_ENTER_RESPONSE_CLAN_DISABLED: return "Lobby is locked"
|
7: return "Clan Disabled"
|
||||||
Steam.CHAT_ROOM_ENTER_RESPONSE_COMMUNITY_BAN: return "Community locked"
|
8: return "Community Ban"
|
||||||
Steam.CHAT_ROOM_ENTER_RESPONSE_MEMBER_BLOCKED_YOU: return "A member blocked you"
|
9: return "Member Blocked You"
|
||||||
Steam.CHAT_ROOM_ENTER_RESPONSE_YOU_BLOCKED_MEMBER: return "You blocked a member"
|
10: return "You Blocked Member"
|
||||||
_: return "Unknown reason"
|
_: return "Unknown Reason"
|
||||||
|
|||||||
@@ -1,9 +1,12 @@
|
|||||||
[gd_scene load_steps=8 format=3 uid="uid://csmfxg011xisf"]
|
[gd_scene load_steps=9 format=3 uid="uid://csmfxg011xisf"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://dopyfulbw2mx5" path="res://player/player.gd" id="1_ulp21"]
|
[ext_resource type="Script" uid="uid://dopyfulbw2mx5" path="res://player/player.gd" id="1_ulp21"]
|
||||||
[ext_resource type="PackedScene" uid="uid://8phs2e161db1" path="res://ui/multiplayer-debug-ui/multiplayer-debug-ui.tscn" id="2_3c3w1"]
|
[ext_resource type="PackedScene" uid="uid://caons6q8u2qt2" path="res://player/player.blend" id="2_3c3w1"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://k6jhk4snc3je" path="res://player/head.blend" id="3_wnvi2"]
|
||||||
|
|
||||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ehsmr"]
|
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_ehsmr"]
|
||||||
|
radius = 0.153372
|
||||||
|
height = 1.37733
|
||||||
|
|
||||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_ulp21"]
|
[sub_resource type="CapsuleMesh" id="CapsuleMesh_ulp21"]
|
||||||
radius = 0.3
|
radius = 0.3
|
||||||
@@ -18,61 +21,71 @@ size = Vector3(0.5, 0.5, 0.5)
|
|||||||
properties/0/path = NodePath(".:position")
|
properties/0/path = NodePath(".:position")
|
||||||
properties/0/spawn = true
|
properties/0/spawn = true
|
||||||
properties/0/replication_mode = 2
|
properties/0/replication_mode = 2
|
||||||
properties/1/path = NodePath(".:rotation")
|
properties/1/path = NodePath("Neck:rotation")
|
||||||
properties/1/spawn = true
|
properties/1/spawn = true
|
||||||
properties/1/replication_mode = 2
|
properties/1/replication_mode = 2
|
||||||
properties/2/path = NodePath("Label3D:text")
|
properties/2/path = NodePath(".:rotation")
|
||||||
properties/2/spawn = true
|
properties/2/spawn = true
|
||||||
properties/2/replication_mode = 1
|
properties/2/replication_mode = 2
|
||||||
|
properties/3/path = NodePath(".:scale")
|
||||||
|
properties/3/spawn = true
|
||||||
|
properties/3/replication_mode = 2
|
||||||
|
|
||||||
[node name="Player" type="CharacterBody3D"]
|
[node name="Player" type="CharacterBody3D" node_paths=PackedStringArray("camera", "neck", "body", "head")]
|
||||||
collision_layer = 2
|
collision_layer = 2
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
script = ExtResource("1_ulp21")
|
script = ExtResource("1_ulp21")
|
||||||
|
camera = NodePath("Neck/Camera3D")
|
||||||
|
neck = NodePath("Neck")
|
||||||
|
body = NodePath("Mesh")
|
||||||
|
head = NodePath("Neck/head")
|
||||||
|
|
||||||
[node name="Camera3D" type="Camera3D" parent="."]
|
[node name="Neck" type="Node3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.399442, 0.0644827)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.297908, 0)
|
||||||
cull_mask = 1048573
|
|
||||||
current = true
|
[node name="Camera3D" type="Camera3D" parent="Neck"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.144889, 0)
|
||||||
|
|
||||||
|
[node name="head" parent="Neck" instance=ExtResource("3_wnvi2")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.222076, 0)
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
shape = SubResource("CapsuleShape3D_ehsmr")
|
shape = SubResource("CapsuleShape3D_ehsmr")
|
||||||
|
|
||||||
[node name="Mesh" type="Node3D" parent="."]
|
[node name="Bean" type="Node3D" parent="."]
|
||||||
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)
|
||||||
|
visible = false
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Mesh"]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="Bean"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 0.89961, 0, 0, 0, 1, 0, -0.318288, 0)
|
transform = Transform3D(1, 0, 0, 0, 0.89961, 0, 0, 0, 1, 0, -0.318288, 0)
|
||||||
layers = 2
|
layers = 2
|
||||||
mesh = SubResource("CapsuleMesh_ulp21")
|
mesh = SubResource("CapsuleMesh_ulp21")
|
||||||
skeleton = NodePath("../..")
|
skeleton = NodePath("../..")
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="Mesh"]
|
[node name="MeshInstance3D2" type="MeshInstance3D" parent="Bean"]
|
||||||
transform = Transform3D(1.41676, 0, 0, 0, 1.31718, 0, 0, 0, 1.22029, 0, 0.415995, 0)
|
transform = Transform3D(1.41676, 0, 0, 0, 1.31718, 0, 0, 0, 1.22029, 0, 0.415995, 0)
|
||||||
layers = 2
|
layers = 2
|
||||||
mesh = SubResource("PrismMesh_3c3w1")
|
mesh = SubResource("PrismMesh_3c3w1")
|
||||||
skeleton = NodePath("../..")
|
skeleton = NodePath("../..")
|
||||||
|
|
||||||
[node name="MeshInstance3D3" type="MeshInstance3D" parent="Mesh"]
|
[node name="MeshInstance3D3" type="MeshInstance3D" parent="Bean"]
|
||||||
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, -0.0855882, 0.409407, 0.293333)
|
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, -0.0855882, 0.409407, 0.293333)
|
||||||
layers = 2
|
layers = 2
|
||||||
mesh = SubResource("SphereMesh_wnvi2")
|
mesh = SubResource("SphereMesh_wnvi2")
|
||||||
skeleton = NodePath("../..")
|
skeleton = NodePath("../..")
|
||||||
|
|
||||||
[node name="MeshInstance3D4" type="MeshInstance3D" parent="Mesh"]
|
[node name="MeshInstance3D4" type="MeshInstance3D" parent="Bean"]
|
||||||
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0.0770122, 0.409407, 0.293333)
|
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0.0770122, 0.409407, 0.293333)
|
||||||
layers = 2
|
layers = 2
|
||||||
mesh = SubResource("SphereMesh_wnvi2")
|
mesh = SubResource("SphereMesh_wnvi2")
|
||||||
skeleton = NodePath("../..")
|
skeleton = NodePath("../..")
|
||||||
|
|
||||||
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
|
||||||
replication_config = SubResource("SceneReplicationConfig_ulp21")
|
|
||||||
|
|
||||||
[node name="Label3D" type="Label3D" parent="."]
|
[node name="Label3D" type="Label3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.887858, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.887858, 0)
|
||||||
billboard = 1
|
billboard = 1
|
||||||
text = "Username"
|
text = "Username"
|
||||||
|
|
||||||
[node name="CanvasLayer" type="CanvasLayer" parent="."]
|
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
|
||||||
|
replication_config = SubResource("SceneReplicationConfig_ulp21")
|
||||||
|
|
||||||
[node name="Multiplayer-debug-ui" parent="CanvasLayer" instance=ExtResource("2_3c3w1")]
|
[node name="Mesh" parent="." instance=ExtResource("2_3c3w1")]
|
||||||
|
|||||||
BIN
splunk/player/head.blend
Normal file
BIN
splunk/player/head.blend
Normal file
Binary file not shown.
53
splunk/player/head.blend.import
Normal file
53
splunk/player/head.blend.import
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://k6jhk4snc3je"
|
||||||
|
path="res://.godot/imported/head.blend-dcafcd72c4b2f826b0eba225740d3f47.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://player/head.blend"
|
||||||
|
dest_files=["res://.godot/imported/head.blend-dcafcd72c4b2f826b0eba225740d3f47.scn"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
nodes/root_type=""
|
||||||
|
nodes/root_name=""
|
||||||
|
nodes/apply_root_scale=true
|
||||||
|
nodes/root_scale=1.0
|
||||||
|
nodes/import_as_skeleton_bones=false
|
||||||
|
nodes/use_node_type_suffixes=true
|
||||||
|
meshes/ensure_tangents=true
|
||||||
|
meshes/generate_lods=true
|
||||||
|
meshes/create_shadow_meshes=true
|
||||||
|
meshes/light_baking=1
|
||||||
|
meshes/lightmap_texel_size=0.2
|
||||||
|
meshes/force_disable_compression=false
|
||||||
|
skins/use_named_skins=true
|
||||||
|
animation/import=true
|
||||||
|
animation/fps=30
|
||||||
|
animation/trimming=false
|
||||||
|
animation/remove_immutable_tracks=true
|
||||||
|
animation/import_rest_as_RESET=false
|
||||||
|
import_script/path=""
|
||||||
|
_subresources={}
|
||||||
|
blender/nodes/visible=0
|
||||||
|
blender/nodes/active_collection_only=false
|
||||||
|
blender/nodes/punctual_lights=true
|
||||||
|
blender/nodes/cameras=true
|
||||||
|
blender/nodes/custom_properties=true
|
||||||
|
blender/nodes/modifiers=1
|
||||||
|
blender/meshes/colors=false
|
||||||
|
blender/meshes/uvs=true
|
||||||
|
blender/meshes/normals=true
|
||||||
|
blender/meshes/export_geometry_nodes_instances=false
|
||||||
|
blender/meshes/tangents=true
|
||||||
|
blender/meshes/skins=2
|
||||||
|
blender/meshes/export_bones_deforming_mesh_only=false
|
||||||
|
blender/materials/unpack_enabled=true
|
||||||
|
blender/materials/export_materials=1
|
||||||
|
blender/animation/limit_playback=true
|
||||||
|
blender/animation/always_sample=true
|
||||||
|
blender/animation/group_tracks=true
|
||||||
BIN
splunk/player/head.blend1
Normal file
BIN
splunk/player/head.blend1
Normal file
Binary file not shown.
BIN
splunk/player/player.blend
Normal file
BIN
splunk/player/player.blend
Normal file
Binary file not shown.
53
splunk/player/player.blend.import
Normal file
53
splunk/player/player.blend.import
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="scene"
|
||||||
|
importer_version=1
|
||||||
|
type="PackedScene"
|
||||||
|
uid="uid://caons6q8u2qt2"
|
||||||
|
path="res://.godot/imported/player.blend-216ce6e732c258e973626ec2ccac6d19.scn"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://player/player.blend"
|
||||||
|
dest_files=["res://.godot/imported/player.blend-216ce6e732c258e973626ec2ccac6d19.scn"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
nodes/root_type=""
|
||||||
|
nodes/root_name=""
|
||||||
|
nodes/apply_root_scale=true
|
||||||
|
nodes/root_scale=1.0
|
||||||
|
nodes/import_as_skeleton_bones=false
|
||||||
|
nodes/use_node_type_suffixes=true
|
||||||
|
meshes/ensure_tangents=true
|
||||||
|
meshes/generate_lods=true
|
||||||
|
meshes/create_shadow_meshes=true
|
||||||
|
meshes/light_baking=1
|
||||||
|
meshes/lightmap_texel_size=0.2
|
||||||
|
meshes/force_disable_compression=false
|
||||||
|
skins/use_named_skins=true
|
||||||
|
animation/import=true
|
||||||
|
animation/fps=30
|
||||||
|
animation/trimming=false
|
||||||
|
animation/remove_immutable_tracks=true
|
||||||
|
animation/import_rest_as_RESET=false
|
||||||
|
import_script/path=""
|
||||||
|
_subresources={}
|
||||||
|
blender/nodes/visible=0
|
||||||
|
blender/nodes/active_collection_only=false
|
||||||
|
blender/nodes/punctual_lights=true
|
||||||
|
blender/nodes/cameras=true
|
||||||
|
blender/nodes/custom_properties=true
|
||||||
|
blender/nodes/modifiers=1
|
||||||
|
blender/meshes/colors=false
|
||||||
|
blender/meshes/uvs=true
|
||||||
|
blender/meshes/normals=true
|
||||||
|
blender/meshes/export_geometry_nodes_instances=false
|
||||||
|
blender/meshes/tangents=true
|
||||||
|
blender/meshes/skins=2
|
||||||
|
blender/meshes/export_bones_deforming_mesh_only=false
|
||||||
|
blender/materials/unpack_enabled=true
|
||||||
|
blender/materials/export_materials=1
|
||||||
|
blender/animation/limit_playback=true
|
||||||
|
blender/animation/always_sample=true
|
||||||
|
blender/animation/group_tracks=true
|
||||||
BIN
splunk/player/player.blend1
Normal file
BIN
splunk/player/player.blend1
Normal file
Binary file not shown.
@@ -1,60 +1,111 @@
|
|||||||
extends CharacterBody3D
|
class_name Player extends CharacterBody3D
|
||||||
|
|
||||||
@export var speed = 5.0
|
@export_category("Player")
|
||||||
@export var jump_velocity = 4.5
|
@export_range(1, 35, 1) var speed: float = 5.0
|
||||||
@export var mouse_sensitivity = 0.002
|
@export_range(10, 400, 1) var acceleration: float = 100.0
|
||||||
|
|
||||||
|
@export_range(0.1, 3.0, 0.1) var jump_height: float = 1.0
|
||||||
|
@export_range(0.1, 3.0, 0.1, "or_greater") var camera_sens: float = 1.0
|
||||||
|
@export_range(0.1, 3.0, 0.1, "or_greater") var joystick_camera_sens_multiplier: float = 5.0
|
||||||
|
@export var camera: Camera3D
|
||||||
|
@export var neck: Node3D
|
||||||
|
@export var body: Node3D
|
||||||
|
@export var head: Node3D
|
||||||
|
|
||||||
|
|
||||||
|
var jumping: bool = false
|
||||||
|
var is_using_joystick: bool = false
|
||||||
|
var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
|
||||||
|
|
||||||
|
var move_dir: Vector2 # Input direction for movement
|
||||||
|
var look_dir: Vector2 # Input direction for look/aim
|
||||||
|
var walk_vel: Vector3 # Walking velocity
|
||||||
|
var grav_vel: Vector3 # Gravity velocity
|
||||||
|
var jump_vel: Vector3 # Jumping velocity
|
||||||
|
|
||||||
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
|
|
||||||
var camera_node: Camera3D
|
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
|
if is_multiplayer_authority():
|
||||||
|
print("-> [%s] Authority granted. Setting up camera and input." % name)
|
||||||
|
camera.make_current()
|
||||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
camera_node = $Camera3D # Assuming Camera3D is a direct child
|
$Mesh.hide()
|
||||||
|
$Label3D.hide()
|
||||||
|
head.hide()
|
||||||
|
|
||||||
$Label3D.text = SteamManager.steam_username
|
|
||||||
|
|
||||||
func _physics_process(delta):
|
func set_player_name(peer_id: String, player_name: String):
|
||||||
# Apply gravity
|
name = peer_id
|
||||||
if not is_on_floor():
|
$Label3D.text = player_name
|
||||||
velocity.y -= gravity * delta
|
|
||||||
|
|
||||||
# Handle Jump
|
|
||||||
if Input.is_action_just_pressed("jump") and is_on_floor():
|
|
||||||
velocity.y = jump_velocity
|
|
||||||
|
|
||||||
# Get the input direction and apply movement
|
|
||||||
var input_dir = Input.get_vector("move_left", "move_right", "move_forward", "move_backward")
|
|
||||||
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
|
|
||||||
|
|
||||||
if is_on_floor():
|
|
||||||
if direction:
|
|
||||||
velocity.x = direction.x * speed
|
|
||||||
velocity.z = direction.z * speed
|
|
||||||
else:
|
|
||||||
velocity.x = move_toward(velocity.x, 0, speed)
|
|
||||||
velocity.z = move_toward(velocity.z, 0, speed)
|
|
||||||
else:
|
|
||||||
# Air control
|
|
||||||
velocity.x = lerp(velocity.x, direction.x * speed, delta * 5.0)
|
|
||||||
velocity.z = lerp(velocity.z, direction.z * speed, delta * 5.0)
|
|
||||||
|
|
||||||
move_and_slide()
|
|
||||||
|
|
||||||
func _input(event):
|
func _input(event):
|
||||||
|
if is_multiplayer_authority():
|
||||||
|
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||||
if event is InputEventMouseMotion:
|
if event is InputEventMouseMotion:
|
||||||
# Rotate the CharacterBody3D around the Y-axis for horizontal look
|
is_using_joystick = false
|
||||||
rotate_y(-event.relative.x * mouse_sensitivity)
|
look_dir = event.relative * 0.001
|
||||||
|
_rotate_camera()
|
||||||
|
elif event is InputEventJoypadMotion:
|
||||||
|
is_using_joystick = true
|
||||||
|
|
||||||
# Rotate the Camera3D around its local X-axis for vertical look
|
if Input.is_action_just_pressed("jump"):
|
||||||
var change = -event.relative.y * mouse_sensitivity
|
jumping = true
|
||||||
var new_x_rotation = camera_node.rotation.x + change
|
|
||||||
camera_node.rotation.x = clamp(new_x_rotation, deg_to_rad(-90), deg_to_rad(90))
|
|
||||||
|
|
||||||
if event.is_action_pressed("ui_cancel"): # Typically Escape key
|
if event.is_action_pressed("esc") and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||||
if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
|
||||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||||
else:
|
elif event.is_action_pressed("esc") and not Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
|
|
||||||
if event.is_action_pressed("toggle_watch"):
|
|
||||||
$"CanvasLayer/Multiplayer-debug-ui".visible = !$"CanvasLayer/Multiplayer-debug-ui".visible
|
func _physics_process(delta: float) -> void:
|
||||||
|
if is_multiplayer_authority():
|
||||||
|
velocity = walk(delta) + _gravity(delta) + _jump(delta)
|
||||||
|
|
||||||
|
global_rotation.x = 0.0
|
||||||
|
global_rotation.z = 0.0
|
||||||
|
|
||||||
|
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||||
|
_handle_joypad_camera_rotation(delta)
|
||||||
|
move_and_slide()
|
||||||
|
|
||||||
|
|
||||||
|
func _rotate_camera(sens_mod: float = 1.0) -> void:
|
||||||
|
if is_multiplayer_authority():
|
||||||
|
var camera_sens_final = camera_sens
|
||||||
|
if is_using_joystick:
|
||||||
|
camera_sens_final = camera_sens * joystick_camera_sens_multiplier
|
||||||
|
|
||||||
|
rotation.y -= look_dir.x * camera_sens_final * sens_mod
|
||||||
|
neck.rotation.x = clamp(neck.rotation.x - look_dir.y * camera_sens_final * sens_mod, -1.5, 1.5)
|
||||||
|
|
||||||
|
|
||||||
|
func _handle_joypad_camera_rotation(delta: float, sens_mod: float = 1.0) -> void:
|
||||||
|
var joypad_dir: Vector2 = Input.get_vector("look_left","look_right","look_up","look_down")
|
||||||
|
if joypad_dir.length() > 0:
|
||||||
|
look_dir += joypad_dir * delta
|
||||||
|
_rotate_camera(sens_mod)
|
||||||
|
look_dir = Vector2.ZERO
|
||||||
|
|
||||||
|
|
||||||
|
func walk(delta: float) -> Vector3:
|
||||||
|
if Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
|
||||||
|
move_dir = Input.get_vector("move_left", "move_right", "move_forward", "move_backward")
|
||||||
|
var _forward: Vector3 = neck.global_transform.basis * Vector3(move_dir.x, 0, move_dir.y)
|
||||||
|
var walk_dir: Vector3 = Vector3(_forward.x, 0, _forward.z).normalized()
|
||||||
|
walk_vel = walk_vel.move_toward(walk_dir * speed * move_dir.length(), acceleration * delta)
|
||||||
|
return walk_vel
|
||||||
|
|
||||||
|
|
||||||
|
func _gravity(delta: float) -> Vector3:
|
||||||
|
grav_vel = Vector3.ZERO if is_on_floor() else grav_vel.move_toward(Vector3(0, velocity.y - gravity, 0), gravity * delta)
|
||||||
|
return grav_vel
|
||||||
|
|
||||||
|
|
||||||
|
func _jump(delta: float) -> Vector3:
|
||||||
|
if jumping:
|
||||||
|
if is_on_floor(): jump_vel = Vector3(0, sqrt(4 * jump_height * gravity), 0)
|
||||||
|
jumping = false
|
||||||
|
return jump_vel
|
||||||
|
jump_vel = Vector3.ZERO if is_on_floor() else jump_vel.move_toward(Vector3.ZERO, gravity * delta)
|
||||||
|
return jump_vel
|
||||||
|
|||||||
BIN
splunk/player/textures/arms.png
Normal file
BIN
splunk/player/textures/arms.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 69 KiB |
35
splunk/player/textures/arms.png.import
Normal file
35
splunk/player/textures/arms.png.import
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://duqmryk4caogn"
|
||||||
|
path.s3tc="res://.godot/imported/arms.png-c03c798cb61a16c352c998058bb5ba07.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://player/textures/arms.png"
|
||||||
|
dest_files=["res://.godot/imported/arms.png-c03c798cb61a16c352c998058bb5ba07.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=0
|
||||||
BIN
splunk/player/textures/body.png
Normal file
BIN
splunk/player/textures/body.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 79 KiB |
35
splunk/player/textures/body.png.import
Normal file
35
splunk/player/textures/body.png.import
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://soon8fejkbpi"
|
||||||
|
path.s3tc="res://.godot/imported/body.png-8538a92e4d8adfcb74ea6ee2f8ff59b0.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://player/textures/body.png"
|
||||||
|
dest_files=["res://.godot/imported/body.png-8538a92e4d8adfcb74ea6ee2f8ff59b0.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=0
|
||||||
BIN
splunk/player/textures/feet.png
Normal file
BIN
splunk/player/textures/feet.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 73 KiB |
35
splunk/player/textures/feet.png.import
Normal file
35
splunk/player/textures/feet.png.import
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://d1opx7wmrdxie"
|
||||||
|
path.s3tc="res://.godot/imported/feet.png-5fda5a3596df7f6058e8acac591e0ee2.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://player/textures/feet.png"
|
||||||
|
dest_files=["res://.godot/imported/feet.png-5fda5a3596df7f6058e8acac591e0ee2.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=0
|
||||||
BIN
splunk/player/textures/head.png
Normal file
BIN
splunk/player/textures/head.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 97 KiB |
35
splunk/player/textures/head.png.import
Normal file
35
splunk/player/textures/head.png.import
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://8wxeis3pudx7"
|
||||||
|
path.s3tc="res://.godot/imported/head.png-d658783ec5627f70f3e95905a0beaf97.s3tc.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://player/textures/head.png"
|
||||||
|
dest_files=["res://.godot/imported/head.png-d658783ec5627f70f3e95905a0beaf97.s3tc.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/high_quality=false
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
process/hdr_as_srgb=false
|
||||||
|
process/hdr_clamp_exposure=false
|
||||||
|
process/size_limit=0
|
||||||
|
detect_3d/compress_to=0
|
||||||
@@ -18,6 +18,7 @@ config/icon="res://icon.svg"
|
|||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
SteamManager="*res://networking/steam-manager.gd"
|
SteamManager="*res://networking/steam-manager.gd"
|
||||||
|
GameManager="*res://game-logic/game_manager.gd"
|
||||||
|
|
||||||
[editor_plugins]
|
[editor_plugins]
|
||||||
|
|
||||||
@@ -96,6 +97,31 @@ inv_slot_4={
|
|||||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":52,"key_label":0,"unicode":52,"location":0,"echo":false,"script":null)
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":52,"key_label":0,"unicode":52,"location":0,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
look_left={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":-1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
look_right={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":0,"axis_value":1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
look_down={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
look_up={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventJoypadMotion,"resource_local_to_scene":false,"resource_name":"","device":-1,"axis":1,"axis_value":-1.0,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
esc={
|
||||||
|
"deadzone": 0.2,
|
||||||
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
[layer_names]
|
[layer_names]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user