Opening door + primitive portal

This commit is contained in:
Vojtěch Struhár 2025-06-18 13:26:15 +02:00
parent 8931d592c5
commit c6e43663a6
5 changed files with 231 additions and 8 deletions

View File

@ -23,3 +23,8 @@ window/size/viewport_height=1080
[editor_plugins] [editor_plugins]
enabled=PackedStringArray("res://addons/portals/plugin.cfg", "res://addons/proton_scatter/plugin.cfg") enabled=PackedStringArray("res://addons/portals/plugin.cfg", "res://addons/proton_scatter/plugin.cfg")
[layer_names]
3d_physics/layer_1="World"
3d_physics/layer_2="Player"

104
scenes/portal_door.tscn Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=18 format=3 uid="uid://dtbrnxalat1d4"] [gd_scene load_steps=23 format=4 uid="uid://dtbrnxalat1d4"]
[ext_resource type="PackedScene" uid="uid://wsu3b5udqtdu" path="res://meshes/village/Wall_UnevenBrick_Straight.gltf" id="1_4mrxx"] [ext_resource type="PackedScene" uid="uid://wsu3b5udqtdu" path="res://meshes/village/Wall_UnevenBrick_Straight.gltf" id="1_4mrxx"]
[ext_resource type="Texture2D" uid="uid://bgc5rl13dopuj" path="res://addons/proton_scatter/demos/assets/textures/sky_2.png" id="1_w7kh3"] [ext_resource type="Texture2D" uid="uid://bgc5rl13dopuj" path="res://addons/proton_scatter/demos/assets/textures/sky_2.png" id="1_w7kh3"]
@ -8,8 +8,10 @@
[ext_resource type="PackedScene" uid="uid://b1eeowrmy2b7j" path="res://meshes/village/Wall_UnevenBrick_Window_Wide_Round.gltf" id="4_e3hyu"] [ext_resource type="PackedScene" uid="uid://b1eeowrmy2b7j" path="res://meshes/village/Wall_UnevenBrick_Window_Wide_Round.gltf" id="4_e3hyu"]
[ext_resource type="PackedScene" uid="uid://7bhh6aas0sxr" path="res://meshes/village/Window_Wide_Round1.gltf" id="5_q5onr"] [ext_resource type="PackedScene" uid="uid://7bhh6aas0sxr" path="res://meshes/village/Window_Wide_Round1.gltf" id="5_q5onr"]
[ext_resource type="PackedScene" uid="uid://c3fv7wek4rjjt" path="res://meshes/village/Floor_WoodLight.gltf" id="6_jhx03"] [ext_resource type="PackedScene" uid="uid://c3fv7wek4rjjt" path="res://meshes/village/Floor_WoodLight.gltf" id="6_jhx03"]
[ext_resource type="PackedScene" uid="uid://berkexxyn3lq4" path="res://meshes/village/DoorFrame_Round_WoodDark.gltf" id="7_o8fc1"] [ext_resource type="PackedScene" uid="uid://cqm26jf01p8uv" path="res://scenes/portal_door.tscn" id="10_q5onr"]
[ext_resource type="PackedScene" uid="uid://db427w7dfyhno" path="res://meshes/village/Door_8_Round.gltf" id="8_xo05s"] [ext_resource type="Script" uid="uid://cw1r4c1d7beyv" path="res://addons/portals/scripts/portal_3d.gd" id="13_xo05s"]
[ext_resource type="Material" uid="uid://dcfkcyddxkglf" path="res://addons/portals/materials/editor-preview-portal-material.tres" id="14_dss4m"]
[ext_resource type="Script" uid="uid://bxcel82b180o3" path="res://addons/portals/scripts/portal_boxmesh.gd" id="15_7t5mc"]
[ext_resource type="PackedScene" uid="uid://dc4ynch2n1ish" path="res://meshes/village/Roof_RoundTiles_4x4.gltf" id="22_kpybi"] [ext_resource type="PackedScene" uid="uid://dc4ynch2n1ish" path="res://meshes/village/Roof_RoundTiles_4x4.gltf" id="22_kpybi"]
[ext_resource type="PackedScene" uid="uid://b7mjoyryltilk" path="res://meshes/village/Roof_Front_Brick4.gltf" id="23_ctatt"] [ext_resource type="PackedScene" uid="uid://b7mjoyryltilk" path="res://meshes/village/Roof_Front_Brick4.gltf" id="23_ctatt"]
[ext_resource type="Script" uid="uid://d2crarvkhd45r" path="res://scripts/player.gd" id="23_kpybi"] [ext_resource type="Script" uid="uid://d2crarvkhd45r" path="res://scripts/player.gd" id="23_kpybi"]
@ -37,6 +39,27 @@ fog_sky_affect = 0.23
radius = 0.4 radius = 0.4
height = 1.75 height = 1.75
[sub_resource type="BoxShape3D" id="BoxShape3D_q5onr"]
size = Vector3(1.83496, 2.19373, 1.46497)
[sub_resource type="ArrayMesh" id="ArrayMesh_lakw3"]
_surfaces = [{
"aabb": AABB(-0.75, -1.25, -1, 1.5, 2.5, 1),
"attribute_data": PackedByteArray("AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAgD8AAAAAAAAAAAAAgD8AAAAAAAAAAAAAgD8AAIA/AACAPw=="),
"format": 34359742487,
"index_count": 36,
"index_data": PackedByteArray("AAABAAQABAABAAUAAQADAAUABQADAAcAAwACAAcABwACAAYAAgAAAAYABgAAAAQABAAFAAYABgAFAAcAAAABAAIAAgABAAMA"),
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 8,
"vertex_data": PackedByteArray("AABAvwAAoD8AAAAAAABAPwAAoD8AAAAAAABAvwAAoL8AAAAAAABAPwAAoL8AAAAAAABAvwAAoD8AAIC/AABAPwAAoD8AAIC/AABAvwAAoL8AAIC/AABAPwAAoL8AAIC//3//f/9/AID/f/9//38AgP9//3//fwCA/3//f/9/AID/f/9//38AgP9//3//fwCA/3//f/9/AID/f/9//38AgA==")
}]
script = ExtResource("15_7t5mc")
size = Vector3(1.5, 2.5, 1)
[sub_resource type="BoxShape3D" id="BoxShape3D_pm21f"]
size = Vector3(1.5, 2.5, 1)
[node name="World" type="Node3D"] [node name="World" type="Node3D"]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."] [node name="WorldEnvironment" type="WorldEnvironment" parent="."]
@ -51,6 +74,7 @@ shadow_enabled = true
[node name="CharacterBody3D" type="CharacterBody3D" parent="." node_paths=PackedStringArray("camera")] [node name="CharacterBody3D" type="CharacterBody3D" parent="." node_paths=PackedStringArray("camera")]
transform = Transform3D(-0.658689, 0, 0.752415, 0, 1, 0, -0.752415, 0, -0.658689, 12.1193, 1.93814, -3.63533) transform = Transform3D(-0.658689, 0, 0.752415, 0, 1, 0, -0.752415, 0, -0.658689, 12.1193, 1.93814, -3.63533)
collision_layer = 3
script = ExtResource("23_kpybi") script = ExtResource("23_kpybi")
camera = NodePath("Camera3D") camera = NodePath("Camera3D")
metadata/_edit_group_ = true metadata/_edit_group_ = true
@ -116,11 +140,53 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, -3.2)
[node name="Floor_WoodLight5" parent="House_Small" instance=ExtResource("6_jhx03")] [node name="Floor_WoodLight5" parent="House_Small" instance=ExtResource("6_jhx03")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, -1.2) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, -1.2)
[node name="DoorFrame_Round_WoodDark2" parent="House_Small" instance=ExtResource("7_o8fc1")] [node name="PortalDoor" parent="House_Small" instance=ExtResource("10_q5onr")]
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 3.1, 0, -3.2) transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 3.1, 0, -3.2)
[node name="Door_8_Round2" parent="House_Small" instance=ExtResource("8_xo05s")] [node name="Area3D" type="Area3D" parent="House_Small/PortalDoor"]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 3.1, 0, -3.7) collision_layer = 0
collision_mask = 2
monitorable = false
[node name="CollisionShape3D" type="CollisionShape3D" parent="House_Small/PortalDoor/Area3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.05282, 0.739908)
shape = SubResource("BoxShape3D_q5onr")
[node name="PortalSmall" type="Node3D" parent="House_Small/PortalDoor" node_paths=PackedStringArray("exit_portal") groups=["portals"]]
process_priority = 100
process_physics_priority = 100
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.000417471, 1.08671, 0.0976808)
script = ExtResource("13_xo05s")
_portal_mesh_path = NodePath("Portal3D_Mesh")
_teleport_area_path = NodePath("TeleportArea")
_teleport_collider_path = NodePath("TeleportArea/Collider")
portal_size = Vector2(1.5, 2.5)
exit_portal = NodePath("../../../PortalSmall2")
portal_frame_width = 0.0
viewport_size_mode = 0
view_direction = 1
portal_render_layer = 524288
is_teleport = true
teleport_direction = 0
rigidbody_boost = 0.0
teleport_tolerance = 0.5
teleport_interactions = 3
teleport_collision_mask = 2
start_deactivated = false
metadata/_custom_type_script = "uid://cw1r4c1d7beyv"
metadata/_edit_group_ = true
[node name="Portal3D_Mesh" type="MeshInstance3D" parent="House_Small/PortalDoor/PortalSmall"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 0.05, 0, 0, 0)
layers = 524288
material_override = ExtResource("14_dss4m")
cast_shadow = 0
mesh = SubResource("ArrayMesh_lakw3")
[node name="TeleportArea" type="Area3D" parent="House_Small/PortalDoor/PortalSmall"]
[node name="Collider" type="CollisionShape3D" parent="House_Small/PortalDoor/PortalSmall/TeleportArea"]
shape = SubResource("BoxShape3D_pm21f")
[node name="OmniLight3D" type="OmniLight3D" parent="House_Small"] [node name="OmniLight3D" type="OmniLight3D" parent="House_Small"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.855677, 2.46514, -2.07212) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.855677, 2.46514, -2.07212)
@ -136,5 +202,41 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.38419e-07, 0, 2.4)
[node name="Roof_Front_Brick43" parent="House_Small/Roof_RoundTiles_4x42" instance=ExtResource("23_ctatt")] [node name="Roof_Front_Brick43" parent="House_Small/Roof_RoundTiles_4x42" instance=ExtResource("23_ctatt")]
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -4.76837e-07, 0, -2.1) transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -4.76837e-07, 0, -2.1)
[node name="ReflectionProbe" type="ReflectionProbe" parent="."] [node name="PortalSmall2" type="Node3D" parent="." node_paths=PackedStringArray("exit_portal") groups=["portals"]]
size = Vector3(50, 20, 50) process_priority = 100
process_physics_priority = 100
transform = Transform3D(-0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, -0.866025, 9.29768, 1.08671, 3.29958)
script = ExtResource("13_xo05s")
_portal_mesh_path = NodePath("Portal3D_Mesh")
_teleport_area_path = NodePath("TeleportArea")
_teleport_collider_path = NodePath("TeleportArea/Collider")
portal_size = Vector2(1.5, 2.5)
exit_portal = NodePath("../House_Small/PortalDoor/PortalSmall")
portal_frame_width = 0.0
viewport_size_mode = 0
view_direction = 1
portal_render_layer = 524288
is_teleport = true
teleport_direction = 0
rigidbody_boost = 0.0
teleport_tolerance = 0.5
teleport_interactions = 3
teleport_collision_mask = 2
start_deactivated = false
metadata/_custom_type_script = "uid://cw1r4c1d7beyv"
metadata/_edit_group_ = true
[node name="Portal3D_Mesh" type="MeshInstance3D" parent="PortalSmall2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 0.05, 0, 0, 0)
layers = 524288
material_override = ExtResource("14_dss4m")
cast_shadow = 0
mesh = SubResource("ArrayMesh_lakw3")
[node name="TeleportArea" type="Area3D" parent="PortalSmall2"]
[node name="Collider" type="CollisionShape3D" parent="PortalSmall2/TeleportArea"]
shape = SubResource("BoxShape3D_pm21f")
[connection signal="area_entered" from="House_Small/PortalDoor/Area3D" to="House_Small/PortalDoor" method="open"]
[connection signal="body_entered" from="House_Small/PortalDoor/Area3D" to="House_Small/PortalDoor" method="open"]

11
scripts/portal_door.gd Normal file
View File

@ -0,0 +1,11 @@
class_name PortalDoor extends Node3D
@onready var animation_player: AnimationPlayer = $AnimationPlayer
var already_open: bool = false
func open(_body) -> void:
if not already_open:
animation_player.play("open")
already_open = true

View File

@ -0,0 +1 @@
uid://bvrb66r23luxo