...
This commit is contained in:
parent
82295d8642
commit
721f005ff3
7 changed files with 60 additions and 9 deletions
|
|
@ -1,5 +1,7 @@
|
|||
[gd_scene format=3 uid="uid://h5qt2pcidh8x"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://coq1j1cdrvqyn" path="res://systems/interaction/portal/portal.tscn" id="1_1yg6u"]
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_d3jw7"]
|
||||
|
||||
[sub_resource type="Sky" id="Sky_1yg6u"]
|
||||
|
|
@ -41,3 +43,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.01873529, 0)
|
|||
[node name="Interaction" type="Node3D" parent="." unique_id=1592705952]
|
||||
|
||||
[node name="Triggers" type="Node3D" parent="." unique_id=1507691477]
|
||||
|
||||
[node name="Portal" parent="." unique_id=988801188 instance=ExtResource("1_1yg6u")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6, 0, -6)
|
||||
target_area_key = "ahnenhalle"
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ NetworkManager="*uid://tniwwfk5703p"
|
|||
[global_group]
|
||||
|
||||
players="Verwaltung der Spieler Objekte"
|
||||
portals="Area Übergänge"
|
||||
|
||||
[physics]
|
||||
|
||||
|
|
|
|||
7
weltenauge/systems/interaction/portal/portal.gd
Normal file
7
weltenauge/systems/interaction/portal/portal.gd
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
extends Area3D
|
||||
|
||||
## Definiert, wohin dieses Portal führt und ermöglicht die Interaktion.
|
||||
## Löst einen RPC an den NetworkManager aus, um einen Area-Wechsel anzufordern.
|
||||
|
||||
# Dieser Wert muss einem Schlüssel in NetworkManager.area_paths entsprechen (z.B. "ahnenhalle").
|
||||
@export var target_area_key: String = ""
|
||||
1
weltenauge/systems/interaction/portal/portal.gd.uid
Normal file
1
weltenauge/systems/interaction/portal/portal.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://c23uu6akws8nj
|
||||
19
weltenauge/systems/interaction/portal/portal.tscn
Normal file
19
weltenauge/systems/interaction/portal/portal.tscn
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
[gd_scene format=3 uid="uid://coq1j1cdrvqyn"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://c23uu6akws8nj" path="res://systems/interaction/portal/portal.gd" id="1_8dnr8"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_h1tlh"]
|
||||
size = Vector3(3.2, 1, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_gtfyq"]
|
||||
|
||||
[node name="Portal" type="Area3D" unique_id=988801188 groups=["portals"]]
|
||||
script = ExtResource("1_8dnr8")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1301383310]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.50266325, 0)
|
||||
shape = SubResource("BoxShape3D_h1tlh")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=1902207257]
|
||||
transform = Transform3D(3.2577846, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.48517025, 0)
|
||||
mesh = SubResource("BoxMesh_gtfyq")
|
||||
|
|
@ -54,7 +54,7 @@ func _on_player_disconnected(id):
|
|||
func change_player_area(id: int, area_key: String):
|
||||
if not multiplayer.is_server(): return
|
||||
print("Server is loading ", area_key)
|
||||
var path = area_paths[area_key]
|
||||
var path = area_paths[area_key
|
||||
|
||||
var container_name = area_key + "_container"
|
||||
var viewport_name = area_key + "_viewport"
|
||||
|
|
@ -111,7 +111,7 @@ func client_ready_to_spawn():
|
|||
if not multiplayer.is_server(): return
|
||||
|
||||
if player_worlds.has(id):
|
||||
var viewport_node = player_worlds[id]
|
||||
var viewport_node = player_worlds[id
|
||||
print("Client ", id, " ist bereit. Spawne jetzt.")
|
||||
_spawn_player_in_world(id, viewport_node)
|
||||
|
||||
|
|
@ -209,3 +209,27 @@ func assign_camera_target(node_name: String):
|
|||
local_camera.target = p
|
||||
|
||||
# var camera = get_viewport().get_camera_3d()
|
||||
|
||||
@rpc("any_peer", "call_remote", "reliable")
|
||||
func handle_area_change_request(area_key: String):
|
||||
var id = multiplayer.get_remote_sender_id()
|
||||
if not player_worlds.has(id): return
|
||||
|
||||
print("Server: Player ", id, " requests area change to ", area_key)
|
||||
|
||||
# 1. Alten Avatar finden und entfernen
|
||||
var old_viewport = player_worlds[id]
|
||||
var player_node = old_viewport.find_child(str(id), true)
|
||||
if player_node:
|
||||
player_node.queue_free()
|
||||
|
||||
# 2. Bestehende Funktion für den Wechsel aufrufen
|
||||
change_player_area(id, area_key)
|
||||
|
||||
## The following script is for a Portal node.
|
||||
## File: portal.gd
|
||||
extends Area3D
|
||||
|
||||
## Definiert, wohin dieses Portal führt.
|
||||
## Dieser Wert muss einem Schlüssel in NetworkManager.area_paths entsprechen.
|
||||
@export var target_area_key: String = ""
|
||||
|
|
|
|||
|
|
@ -11,8 +11,6 @@ extends CharacterBody3D
|
|||
var path: PackedVector3Array = []
|
||||
var speed = 5.0
|
||||
|
||||
var _is_displayed=false
|
||||
|
||||
func _enter_tree():
|
||||
# Da der Name des Nodes die Peer-ID ist, setzen wir die Authority einfach selbst
|
||||
if name.is_valid_int():
|
||||
|
|
@ -41,8 +39,6 @@ func _ready():
|
|||
func _physics_process(delta):
|
||||
# Dieser Teil läuft NUR auf dem Server
|
||||
if path.size() > 0:
|
||||
print("Server moving...")
|
||||
_is_displayed = false
|
||||
var next_point = path[0]
|
||||
var direction = (next_point - global_position).normalized()
|
||||
|
||||
|
|
@ -62,9 +58,6 @@ func _physics_process(delta):
|
|||
else:
|
||||
velocity = Vector3.ZERO
|
||||
sync_position = global_position # Sicherstellen, dass Standbild syncron bleibt
|
||||
if _is_displayed == false:
|
||||
print("Target reached:", sync_position)
|
||||
_is_displayed = true
|
||||
|
||||
|
||||
@rpc("any_peer", "call_remote", "reliable")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue