Compare commits
30 Commits
konzultace
...
main
Author | SHA1 | Date | |
---|---|---|---|
42490ddad9 | |||
1e100bee4d | |||
5e8725eefc | |||
eba916fb81 | |||
50314f1ad8 | |||
ded1600175 | |||
5012b5f73e | |||
da87b39b3d | |||
5345386d36 | |||
447e821429 | |||
1fa1e709ff | |||
ac50e8eee7 | |||
200694a005 | |||
4a08b21bed | |||
7266a89b60 | |||
a50449c71b | |||
f39c7e70c7 | |||
1a908d4eff | |||
2e8c1a5562 | |||
2c01143579 | |||
3187c3d359 | |||
3834d282ca | |||
808e1503fb | |||
eeb35efa18 | |||
2da0429cdd | |||
f3440af264 | |||
f62e1aee25 | |||
30d2636fdb | |||
b67f0d9263 | |||
cbb4b51a94 |
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,3 +1,5 @@
|
||||
# Godot 4+ specific ignores
|
||||
.godot/
|
||||
/android/
|
||||
.idea
|
||||
.DS_Store
|
||||
|
74
NOTES.md
74
NOTES.md
@ -1,13 +1,3 @@
|
||||
# DP Konzultace 1
|
||||
|
||||
- 11.2.2024
|
||||
|
||||
## Optat se
|
||||
|
||||
- Udělám pár technických vylepšení a jinak se zaměřím na DX portálů - gizma, guidy, procedural mesh
|
||||
- Téma DP do IS?
|
||||
- Kdy se odevzdává DP?
|
||||
|
||||
## Poznámky k implementaci
|
||||
|
||||
### 5 roomka
|
||||
@ -32,3 +22,67 @@ venkovního úhlu. Protože reálně jsem od něj mega daleko, takže portálov
|
||||
že on má Y-up a Blender používá Z-up. V portal repu je k tomu poznámka ale nepochopil jsem to asi.
|
||||
- Divně se na ten mesh pak projektuje ta textura kamery??
|
||||
- Možná by stálo za to udělat procedurální mesh. Nejběžnější tvar portálu bude asi obdélník
|
||||
- `OnScreenNotifier3D` nemůže specifikovat _která_ kamera ten objekt vidí, takže je asi k ničemu.
|
||||
Portály se vidí různě navzájem, s tolika kamerama ve scéně je to nepředvídatelné trochu.
|
||||
- **I když** možná by to šlo pofejkovat s culling vrstvama. Vzdáváme se tím rekurzivních portálů, ale kdyby portály **ne**renderovaly ostatní portály, tak by se daly vypnout v momentě kdy nejsou vidět (stonks?)
|
||||
- **Fejkování světel** (OmniLight) by možná šlo!!! S rendering layerama bys nastavil aby některé světla byly vidět JEN skrz portály a NE tou kamerou co má hráč na sobě.
|
||||
- Tohle platí hlavně u ~~free-standing~~ portálů na které jde koukat z obou stran. *Bylo by divné kdyby byl zezadu portálu ve vzduchu light source jenom proto, že na druhé straně portálu (bůh ví kde) takový source někde je*
|
||||
- Free-standing portál neni uplně dobrý příklad, protože by to světlo mělo házet _výseč_ ven. To ničím fajné, to jsme zpátky u raytracingu. Leda by to člověk oblbnul nějakým shadow meshem nebo něco.. hm. Velmi specifické. Ale u těch dveří jako v semaforovém levelu by to fungovalo asi v pohodě, protože kolem futer je stěna.
|
||||
- Spotlight..?
|
||||
|
||||
### Gizmos
|
||||
|
||||
- Kreslím kubickou bezierku, která spojuje portál s exit portálem, ale nevypadá to nic moc. Je to blbě vidět a hloubka se dost ztrácí.
|
||||
- Možná by bylo lepší ten exit portal _highlightnout_ podobně jak je zrovna vybraný node - double line gizmo
|
||||
- TODO: Handly na procedurální mesh. Inspirace v godotím CollisionShape
|
||||
|
||||
### Procedural mesh
|
||||
|
||||
Momentálně procedural mesh generuju helper nodem. Tohle je ideální kandidát na _gizmo handles_ podobně jak collision shape
|
||||
|
||||
- Normály jsou pass. Mám jenom 8 vertexů, takže to bude dycky vypadat blbě. Ale portály jsou stejně vždycky unshaded.
|
||||
- **Zmínit v DP!** Docela dobrý sell, obhajoba rozhodnutí.
|
||||
- *UV coords:* Když se na portál podívám přímo zepředu (ortogonálně), tak ten indent není vubec vidět. Nejsem si jistý jestli to je k něčemu.. ten portálový mesh který jsem vzal z _simple portal sytem_ ani žádné UV coodinates nemá. Procedural mesh funguje hezky ✅
|
||||
- Možná by se to hodilo kdyby měl portál "inactive" texturu... ale to se dá obejít placatým meshem narvaným před něj.. a neřešíš prohlubeň. Asi undefined behavior tady :D nechám na vývojářích
|
||||
- Na to kolik jsem s tím teď zabil času, tak tohle je asi nanic. Prohlubeň je extrémně důležitá featura.
|
||||
|
||||

|
||||
|
||||
- **Stíny** - shadow mesh tam můžu a nemusím plácnout (stejný jako hlavní). Další věc je že stíny by asi měly být na OFF a nebo DOUBLE_SIDED. Asi to nechám na uživateli.. to s meshem nesouvisí nutně.
|
||||
|
||||
### Texture portal mask :x:
|
||||
|
||||
Mám v plánu udělat texture masku pro tvarování protálů. S házením stínů to bude průser. V tomhle je přístup s _tvarem meshe_ lepší. Měl bych nakódit generování vícero tvarů...?
|
||||
|
||||
:exclamation: Tohle asi nebude fungovat kvůli té prohlubni
|
||||
|
||||
- Kdybys měl oblouk nahoře, tak nemůžeš jenom tak clipnout obdélníkový portál. Kdyby byl plochý, tak jo. Ale takhle bude ten okraj nahoře jakoby zabořený a nebude to pěkné (asi). Zvlášť v rožkách.
|
||||
|
||||

|
||||
|
||||
:question: Tohle asi řeší tenký box s **culling- off** jak měl Sebastian ve svém Unity videu. Akorát to žere trochu renderingu.. ale v porovnání s X kamerama navíc je to asi fuk.
|
||||
|
||||
> BoxMesh3D mi nefunguje na hned. Ugh, nejsem si jistý proč.. ale mám dojem že ten chlapík co vyrobil ty portály by to asi zkusil. Prohlubeň možná dává smysl.
|
||||
|
||||
> Dal by se udělat celkem jednoduchý algoritmus co by generoval mesh "s prohlubní" pro jakýkoliv nákres zepředu. Obdélník je nejjednodušší, ale udělat oblouček by asi nebyl problém.
|
||||
>
|
||||
> Podobně jak se dá "kreslit" s CSG polygonem. Ale to by byl teda komplikovaný editor widget. Ty oblouky bysme asi chtěli hladké - to vypadá na něco na styl Curve editoru... ugh
|
||||
>
|
||||
> 
|
||||
>
|
||||
> [Cyclops Level Editor](https://github.com/blackears/cyclopsLevelBuilder/blob/master/doc/index.md#display-mode)
|
||||
|
||||
**Custom Mesh subclassa?**
|
||||
|
||||
- Custom mesh subclassa je trochu divná věc. Když to všechno nastaví jeden editorový Node tak to bude asi lepší. Custom mesh se mi přegenerovává při každém spuštění, ale já chci aby se prostě "zapekl" a uložil a nazdar bazar...
|
||||
|
||||
## Detekce teleportu
|
||||
|
||||
> Marek Zouhar: navrhuje predikovat jestli hráč projde portálem příští frame. Tohle by mohlo řešit
|
||||
> clipping. Protože já vlastně toho hráče _doopravdy_ teleportuju až když je _za_ portálem.
|
||||
>
|
||||
> V tu chvilku už je pozdě!! A pak musím mít promáčklý mesh.
|
||||
>
|
||||
> S tímhle bych mohl mít prostě _plane mesh_.
|
||||
|
||||
> Potenciálně 2 plejny těsně za sebou abych předešel clippingu?
|
||||
|
6
README.md
Normal file
6
README.md
Normal file
@ -0,0 +1,6 @@
|
||||
# Portals Demo
|
||||
|
||||
Git repos
|
||||
|
||||
- Gitea: https://git.vojtechstruhar.com/Vojta/dp-konzultace
|
||||
- GitHub (mirror): https://github.com/VojtaStruhar/dp-konzultace
|
49
addons/inspector_buttons/inspector_buttons.gd
Normal file
49
addons/inspector_buttons/inspector_buttons.gd
Normal file
@ -0,0 +1,49 @@
|
||||
@tool
|
||||
extends EditorPlugin
|
||||
|
||||
var editor_button_plugin:EditorButtonPlugin
|
||||
|
||||
func _enter_tree() -> void:
|
||||
print("[inspector_buttons] enter")
|
||||
editor_button_plugin = EditorButtonPlugin.new()
|
||||
add_inspector_plugin(editor_button_plugin)
|
||||
|
||||
|
||||
func _exit_tree() -> void:
|
||||
if is_instance_valid(editor_button_plugin):
|
||||
print("[inspector_buttons] exit")
|
||||
remove_inspector_plugin(editor_button_plugin)
|
||||
editor_button_plugin = null
|
||||
|
||||
|
||||
class EditorButtonPlugin extends EditorInspectorPlugin:
|
||||
func _can_handle(object: Object) -> bool:
|
||||
return object.has_method('_add_inspector_buttons')
|
||||
|
||||
|
||||
func _parse_begin(object: Object) -> void:
|
||||
var buttons_data = object._add_inspector_buttons()
|
||||
for button_data in buttons_data:
|
||||
var name = button_data.get("name", null)
|
||||
var icon = button_data.get("icon", null)
|
||||
var pressed = button_data.get("pressed", null)
|
||||
if not name:
|
||||
push_warning('_add_inspector_buttons(): A button does not have a name key. Defaulting to: "Button"')
|
||||
name = "Button"
|
||||
if icon and not icon is Texture:
|
||||
push_warning('_add_inspector_buttons(): The button <{name}> icon is not a texture.'.format({"name":name}))
|
||||
icon = null
|
||||
if not pressed:
|
||||
push_warning('_add_inspector_buttons(): The button <{name}> does not have a pressed key. Skipping.'.format({"name":name}))
|
||||
continue
|
||||
if not pressed is Callable:
|
||||
push_warning('_add_inspector_buttons(): The button <{name}> pressed is not a Callable. Skipping.'.format({"name":name}))
|
||||
continue
|
||||
|
||||
var button = Button.new()
|
||||
button.text = name
|
||||
if icon:
|
||||
button.icon = icon
|
||||
button.expand_icon = true
|
||||
button.pressed.connect(pressed)
|
||||
add_custom_control(button)
|
1
addons/inspector_buttons/inspector_buttons.gd.uid
Normal file
1
addons/inspector_buttons/inspector_buttons.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://cmkf6s21ky7b5
|
7
addons/inspector_buttons/plugin.cfg
Normal file
7
addons/inspector_buttons/plugin.cfg
Normal file
@ -0,0 +1,7 @@
|
||||
[plugin]
|
||||
|
||||
name="Inspector Buttons"
|
||||
description="Quick and dirty Godot inspector plugins. Taken from the internets"
|
||||
author="mrcdk"
|
||||
version="0.1"
|
||||
script="inspector_buttons.gd"
|
70
addons/portal_gizmos/gizmo.gd
Normal file
70
addons/portal_gizmos/gizmo.gd
Normal file
@ -0,0 +1,70 @@
|
||||
extends EditorNode3DGizmoPlugin
|
||||
|
||||
|
||||
func _init():
|
||||
print("[gizmo] _init")
|
||||
create_material("main", Color(1,0,1), false, true, false)
|
||||
|
||||
|
||||
func _get_gizmo_name() -> String:
|
||||
return "PortalGizmo"
|
||||
|
||||
|
||||
func _has_gizmo(for_node_3d: Node3D) -> bool:
|
||||
var result: bool = for_node_3d is Portal
|
||||
return result
|
||||
|
||||
|
||||
func _redraw(gizmo):
|
||||
var portal = gizmo.get_node_3d() as Portal
|
||||
|
||||
gizmo.clear() # Always clear the gizmo
|
||||
|
||||
if portal not in EditorInterface.get_selection().get_selected_nodes():
|
||||
return # If not selected, don't draw anything
|
||||
|
||||
var lines = PackedVector3Array()
|
||||
|
||||
if portal.exit_portal != null:
|
||||
# Draw a bezier curve connecting the two portals
|
||||
var exit = portal.exit_portal
|
||||
var D = portal.global_position.distance_to(exit.global_position)
|
||||
|
||||
var p0 = portal.global_position
|
||||
var p3 = exit.global_position
|
||||
|
||||
var p1 = p0 -portal.global_transform.basis.z * D * 0.25
|
||||
var p2 = p3 -exit.global_transform.basis.z * D * 0.25
|
||||
|
||||
|
||||
p0 = portal.to_local(p0)
|
||||
p1 = portal.to_local(p1)
|
||||
p2 = portal.to_local(p2)
|
||||
p3 = portal.to_local(p3)
|
||||
|
||||
lines.push_back(p0)
|
||||
|
||||
const RESOLUTION: int = 24
|
||||
for i in range(1, RESOLUTION + 1):
|
||||
var t: float = float(i) / RESOLUTION
|
||||
var spline_pos: Vector3 = pow(1 - t, 3) * p0 \
|
||||
+ 3 * pow(1 - t, 2) * t * p1 \
|
||||
+ 3 * (1 - t) * pow(t, 2) * p2 \
|
||||
+ pow(t, 3) * p3
|
||||
|
||||
lines.push_back(spline_pos)
|
||||
lines.push_back(spline_pos)
|
||||
|
||||
lines.push_back(p3)
|
||||
|
||||
#var handles = PackedVector3Array()
|
||||
#handles.push_back(Vector3(0, 1, 0))
|
||||
#handles.push_back(Vector3(0, 2, 0))
|
||||
|
||||
gizmo.add_lines(lines, get_material("main", gizmo))
|
||||
# Thicker dashed line
|
||||
var l2 = lines.duplicate()
|
||||
for i in range(l2.size()): l2[i].x += 0.01
|
||||
gizmo.add_lines(l2, get_material("main", gizmo))
|
||||
|
||||
#gizmo.add_handles(handles, get_material("handles", gizmo), [])
|
1
addons/portal_gizmos/gizmo.gd.uid
Normal file
1
addons/portal_gizmos/gizmo.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://b8vlwx31bxx4b
|
7
addons/portal_gizmos/plugin.cfg
Normal file
7
addons/portal_gizmos/plugin.cfg
Normal file
@ -0,0 +1,7 @@
|
||||
[plugin]
|
||||
|
||||
name="Portal Gizmos"
|
||||
description="Plugin providing 3D Gizmos for portals"
|
||||
author="Vojtech Struhar"
|
||||
version="0.1"
|
||||
script="portal_gizmos.gd"
|
13
addons/portal_gizmos/portal_gizmos.gd
Normal file
13
addons/portal_gizmos/portal_gizmos.gd
Normal file
@ -0,0 +1,13 @@
|
||||
@tool
|
||||
extends EditorPlugin
|
||||
|
||||
const GIZMO_PACKED = preload("gizmo.gd")
|
||||
var gizmo = GIZMO_PACKED.new()
|
||||
|
||||
func _enter_tree() -> void:
|
||||
print("[portal_gizmos] Enter")
|
||||
add_node_3d_gizmo_plugin(gizmo)
|
||||
|
||||
func _exit_tree() -> void:
|
||||
print("[portal_gizmos] Exit")
|
||||
remove_node_3d_gizmo_plugin(gizmo)
|
1
addons/portal_gizmos/portal_gizmos.gd.uid
Normal file
1
addons/portal_gizmos/portal_gizmos.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://c61kmx68labq0
|
@ -111,7 +111,6 @@ func _on_area_entered(area:Area3D) -> void:
|
||||
# The node may not teleport immediately if it's not heading TOWARDS the portal,
|
||||
# so we keep a reference to it until it teleports or leaves.
|
||||
# This also allows us to hide its portal clone after it leaves.
|
||||
|
||||
var root: Node3D = area.get_node(area.get_meta("teleportable_root"))
|
||||
|
||||
var crossing_node: Dictionary
|
||||
|
@ -63,6 +63,9 @@ var _exit_camera:Camera3D
|
||||
# The number of seconds until the viewport updates its size
|
||||
var _seconds_until_resize: float
|
||||
|
||||
func _enter_tree() -> void:
|
||||
add_to_group("portals")
|
||||
|
||||
func _ready() -> void:
|
||||
if not is_inside_tree():
|
||||
push_error("The portal \"%s\" is not inside a SceneTree." % name)
|
||||
@ -102,7 +105,7 @@ func _ready() -> void:
|
||||
# Create the viewport when _ready if it's not destroyed when disabled.
|
||||
# This may potentially get rid of the initial lag when the viewport is first created at the cost of texture memory.
|
||||
if not destroy_disabled_viewport:
|
||||
_create_viewport()
|
||||
_createa_viewport()
|
||||
|
||||
get_viewport().connect("size_changed", _handle_resize)
|
||||
|
||||
|
@ -23,8 +23,10 @@ func _ready():
|
||||
func _on_area_entered(area: Area3D) -> void:
|
||||
if area.has_meta("teleportable_root"):
|
||||
var root: Node3D = area.get_node(area.get_meta("teleportable_root"))
|
||||
print("[%f] Teleporting %s to %s" % [roundi(Time.get_ticks_msec() / 100) / 10.0, root.name, _parent_portal.exit_portal.name])
|
||||
root.global_transform = _parent_portal.real_to_exit_transform(root.global_transform)
|
||||
|
||||
func _on_body_entered(body: Node3D) -> void:
|
||||
if body.get_meta("teleportable", false) == true:
|
||||
body.global_transform = _parent_portal.real_to_exit_transform(body.global_transform)
|
||||
print("Teleporting %s to %s" % [body.name, _parent_portal.exit_portal.name])
|
||||
|
@ -9,6 +9,7 @@
|
||||
shader_type spatial;
|
||||
render_mode unshaded;
|
||||
|
||||
|
||||
uniform float fade_out_distance_max = 10.0;
|
||||
uniform float fade_out_distance_min = 8.0;
|
||||
uniform vec4 fade_out_color = vec4(0.0);
|
||||
|
0
assets/.gdignore
Normal file
0
assets/.gdignore
Normal file
BIN
assets/csg-polygon.png
Normal file
BIN
assets/csg-polygon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 366 KiB |
BIN
assets/portal-uv-coordinates.png
Normal file
BIN
assets/portal-uv-coordinates.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 MiB |
BIN
assets/round-portal-frame-square-portal-mesh.png
Normal file
BIN
assets/round-portal-frame-square-portal-mesh.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 734 KiB |
6
hud.gd
6
hud.gd
@ -1,13 +1,17 @@
|
||||
extends VBoxContainer
|
||||
|
||||
@onready var fps_label: Label = $FPS_Label
|
||||
|
||||
func _ready() -> void:
|
||||
toggle_hud() # This should hide the HUD by default
|
||||
fps_label.reparent.call_deferred(get_parent())
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
func _process(_delta: float) -> void:
|
||||
if Input.is_action_just_pressed("ui_cancel"):
|
||||
toggle_hud()
|
||||
|
||||
fps_label.text = "FPS: %d" % Engine.get_frames_per_second()
|
||||
|
||||
func toggle_hud() -> void:
|
||||
|
||||
var should_show = Input.mouse_mode == Input.MOUSE_MODE_CAPTURED
|
||||
|
11
hud.tscn
11
hud.tscn
@ -1,8 +1,10 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://b5x7fmpwck335"]
|
||||
[gd_scene load_steps=3 format=3 uid="uid://b5x7fmpwck335"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://dys441ih752an" path="res://hud.gd" id="1_37p78"]
|
||||
[ext_resource type="Theme" uid="uid://h8lwapw6q4pv" path="res://menu_theme.tres" id="1_64ctp"]
|
||||
|
||||
[node name="HUD" type="VBoxContainer"]
|
||||
theme = ExtResource("1_64ctp")
|
||||
script = ExtResource("1_37p78")
|
||||
|
||||
[node name="MenuButton" type="Button" parent="."]
|
||||
@ -10,4 +12,11 @@ unique_name_in_owner = true
|
||||
layout_mode = 2
|
||||
text = "Back to Menu"
|
||||
|
||||
[node name="FPS_Label" type="Label" parent="."]
|
||||
layout_mode = 2
|
||||
text = "FPS: -1"
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="."]
|
||||
layout_mode = 2
|
||||
|
||||
[connection signal="pressed" from="MenuButton" to="." method="_on_menu_button_pressed"]
|
||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
169
levels/level_cube_portals.tscn
Normal file
169
levels/level_cube_portals.tscn
Normal file
File diff suppressed because one or more lines are too long
31
levels/level_hermione.gd
Normal file
31
levels/level_hermione.gd
Normal file
@ -0,0 +1,31 @@
|
||||
extends Node
|
||||
|
||||
@onready var player: CharacterBody3D = %Player
|
||||
@onready var outside_world: SubViewport = %OutsideWorld
|
||||
@onready var inside_world: SubViewport = %InsideWorld
|
||||
@onready var sub_viewport_container: SubViewportContainer = $SubViewportContainer
|
||||
|
||||
var current_world: Node
|
||||
|
||||
func _ready() -> void:
|
||||
current_world = outside_world
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if Input.is_action_just_pressed("debug_teleport"):
|
||||
_on_teleport_button_pressed()
|
||||
|
||||
|
||||
func _on_teleport_button_pressed() -> void:
|
||||
if current_world == outside_world:
|
||||
outside_world.reparent(self)
|
||||
inside_world.reparent(sub_viewport_container)
|
||||
current_world = inside_world
|
||||
else:
|
||||
inside_world.reparent(self)
|
||||
outside_world.reparent(sub_viewport_container)
|
||||
current_world = outside_world
|
||||
|
||||
player.reparent(current_world.get_child(0))
|
||||
|
||||
|
1
levels/level_hermione.gd.uid
Normal file
1
levels/level_hermione.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://ca45js46kc0l7
|
48
levels/level_hermione.tscn
Normal file
48
levels/level_hermione.tscn
Normal file
@ -0,0 +1,48 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://dgvdetmbv5jya"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://b5x7fmpwck335" path="res://hud.tscn" id="1_2k7q4"]
|
||||
[ext_resource type="Script" uid="uid://ca45js46kc0l7" path="res://levels/level_hermione.gd" id="1_gyvwl"]
|
||||
[ext_resource type="PackedScene" uid="uid://drhaqr78kv1o2" path="res://levels/room_hermione_outside.tscn" id="2_empe6"]
|
||||
[ext_resource type="PackedScene" uid="uid://ci81nttn6foio" path="res://levels/room_hermione_inside.tscn" id="2_lv1mc"]
|
||||
[ext_resource type="PackedScene" uid="uid://cgdlowfuuorvi" path="res://player.tscn" id="3_gyvwl"]
|
||||
|
||||
[node name="level_hermione" type="Node"]
|
||||
script = ExtResource("1_gyvwl")
|
||||
|
||||
[node name="SubViewportContainer" type="SubViewportContainer" parent="."]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="OutsideWorld" type="SubViewport" parent="SubViewportContainer"]
|
||||
unique_name_in_owner = true
|
||||
handle_input_locally = false
|
||||
size = Vector2i(1920, 1080)
|
||||
render_target_update_mode = 4
|
||||
|
||||
[node name="OutsideWorldContainer" type="Node3D" parent="SubViewportContainer/OutsideWorld"]
|
||||
|
||||
[node name="room_hermione_outside" parent="SubViewportContainer/OutsideWorld/OutsideWorldContainer" instance=ExtResource("2_empe6")]
|
||||
|
||||
[node name="Player" parent="SubViewportContainer/OutsideWorld/OutsideWorldContainer" instance=ExtResource("3_gyvwl")]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.08041, 1.41104, 0)
|
||||
|
||||
[node name="HUD" parent="." instance=ExtResource("1_2k7q4")]
|
||||
|
||||
[node name="TeleportButton" type="Button" parent="HUD"]
|
||||
layout_mode = 2
|
||||
text = "Switch Worlds (T)"
|
||||
|
||||
[node name="InsideWorld" type="SubViewport" parent="."]
|
||||
unique_name_in_owner = true
|
||||
own_world_3d = true
|
||||
size = Vector2i(1920, 1080)
|
||||
|
||||
[node name="InsideWorldContainer" type="Node3D" parent="InsideWorld"]
|
||||
|
||||
[node name="room_hermione_inside" parent="InsideWorld/InsideWorldContainer" instance=ExtResource("2_lv1mc")]
|
||||
|
||||
[connection signal="pressed" from="HUD/TeleportButton" to="." method="_on_teleport_button_pressed"]
|
15
levels/level_my_portals.gd
Normal file
15
levels/level_my_portals.gd
Normal file
@ -0,0 +1,15 @@
|
||||
extends Node3D
|
||||
|
||||
@onready var orange: Node3D = $Orange
|
||||
@onready var green: Node3D = $Green
|
||||
@onready var player: CharacterBody3D = $Player
|
||||
|
||||
|
||||
func _on_transport_to_orange_pressed() -> void:
|
||||
player.global_position = orange.global_position
|
||||
player.global_position.y += 10
|
||||
|
||||
|
||||
func _on_transport_to_green_pressed() -> void:
|
||||
player.global_position = green.global_position
|
||||
player.global_position.y += 10
|
1
levels/level_my_portals.gd.uid
Normal file
1
levels/level_my_portals.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://c8vjum7jkvrv0
|
269
levels/level_my_portals.tscn
Normal file
269
levels/level_my_portals.tscn
Normal file
@ -0,0 +1,269 @@
|
||||
[gd_scene load_steps=25 format=4 uid="uid://rlienyx6av8u"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cxopylew5786r" path="res://portal_environment_adapter.tscn" id="1_eoaoo"]
|
||||
[ext_resource type="Script" uid="uid://c8vjum7jkvrv0" path="res://levels/level_my_portals.gd" id="1_pccqs"]
|
||||
[ext_resource type="Material" uid="uid://bx6qeabdhq2s" path="res://addons/kenney_prototype_tools/materials/dark/material_01.tres" id="1_v6nyh"]
|
||||
[ext_resource type="Material" uid="uid://dn16yhnqtqh7i" path="res://addons/kenney_prototype_tools/materials/orange/material_02.tres" id="2_5nkxg"]
|
||||
[ext_resource type="PackedScene" uid="uid://cgdlowfuuorvi" path="res://player.tscn" id="3_ysrn6"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5x7fmpwck335" path="res://hud.tscn" id="4_t21k5"]
|
||||
[ext_resource type="Material" uid="uid://oob6p5w3hsl5" path="res://addons/kenney_prototype_tools/materials/red/material_09.tres" id="6_2ffpc"]
|
||||
[ext_resource type="Material" uid="uid://b7kc8jfs4fowj" path="res://addons/kenney_prototype_tools/materials/green/material_02.tres" id="6_b88kk"]
|
||||
[ext_resource type="Script" uid="uid://dh8miiv7xc4ps" path="res://scripts/my_portal.gd" id="7_pvdtj"]
|
||||
[ext_resource type="Material" uid="uid://ci8rdsdqe5a61" path="res://addons/kenney_prototype_tools/materials/light/material_06.tres" id="8_dhtg5"]
|
||||
[ext_resource type="PackedScene" uid="uid://d1dtxvwk86ple" path="res://procedural_mesh_maker.tscn" id="9_dhtg5"]
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_t21k5"]
|
||||
sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
|
||||
ground_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
|
||||
|
||||
[sub_resource type="Sky" id="Sky_eoaoo"]
|
||||
sky_material = SubResource("ProceduralSkyMaterial_t21k5")
|
||||
|
||||
[sub_resource type="Environment" id="Environment_b88kk"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_eoaoo")
|
||||
glow_enabled = true
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_7nftg"]
|
||||
data = PackedVector3Array(-9, -1.5, -9, -10, -1.5, -10, -9, -1.5, 9, -10, -1.5, 10, -10, -1.5, -10, -10, 1.5, -10, -10, -1.5, -10, -9, -1.5, -9, 9, -1.5, -9, 10, -1.5, -10, -10, 1.5, -10, -10, -1.5, -10, -9, -1.5, 9, -10, -1.5, -10, -10, -1.5, 10, 10, -1.5, 10, -9, -1.5, 9, -10, -1.5, 10, -9, 1.5, -9, -10, 1.5, 10, -10, 1.5, -10, 10, 1.5, -10, -9, 1.5, -9, -10, 1.5, -10, -10, 1.5, -10, -10, 1.5, 10, -10, -1.5, 10, -9, 1.5, 9, -10, 1.5, 10, -9, 1.5, -9, -10, 1.5, 10, 10, 1.5, 10, -10, -1.5, 10, -10, 1.5, 10, -9, 1.5, 9, 9, 1.5, 9, -10, -1.5, -10, 9, -1.5, -9, 10, -1.5, -10, 9, -1.5, -9, 10, -1.5, 10, 10, -1.5, -10, 10, -1.5, 10, 9, -1.5, 9, -9, -1.5, 9, 10, 1.5, 10, 10, -1.5, 10, -10, -1.5, 10, 9, -1.5, 9, 10, -1.5, 10, 9, -1.5, -9, 10, -1.5, 10, 10, 1.5, 10, 10, -1.5, -10, 10, -1.5, -10, 10, 1.5, -10, -10, 1.5, -10, 10, 1.5, -10, 9, 1.5, -9, -9, 1.5, -9, 10, 1.5, 10, 10, 1.5, -10, 10, -1.5, -10, 9, 1.5, -9, 10, 1.5, -10, 9, 1.5, 9, -10, 1.5, 10, 9, 1.5, 9, 10, 1.5, 10, 9, 1.5, 9, 10, 1.5, -10, 10, 1.5, 10, -9, 1.5, -9, -9, -1.5, -9, -9, -1.5, 9, 9, -1.5, -9, -9, -1.5, -9, -9, 1.5, -9, -9, -1.5, 9, -9, 1.5, 9, -9, 1.5, -9, 9, 1.5, 9, -9, 1.5, 9, -9, -1.5, 9, -9, -1.5, 9, 9, -1.5, 9, 9, 1.5, 9, 9, 1.5, 9, 9, -1.5, 9, 9, -1.5, -9, -9, 1.5, -9, 9, 1.5, -9, 9, -1.5, -9, 9, -1.5, -9, 9, 1.5, -9, 9, 1.5, 9)
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_v6nyh"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-10, -1.5, -10, 20, 3, 20),
|
||||
"attribute_data": PackedByteArray("MzNzP83MTD0AAIA/AAAAAM3MTD3NzEw9AACAPwAAgD8AAIA/AAAAAAAAAAAAAAAAAACAPwAAAAAzM3M/zcxMPTMzcz8zM3M/AAAAAAAAAAAAAIA/AACAPwAAgD8AAAAAzcxMPc3MTD0AAIA/AAAAAAAAAAAAAAAAAAAAAAAAgD/NzEw9zcxMPQAAAAAAAAAAMzNzPzMzcz8AAAAAAACAPwAAgD8AAIA/AACAPwAAAAAzM3M/MzNzPwAAgD8AAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/zcxMPTMzcz8AAAAAAACAPzMzcz8zM3M/AACAPwAAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAgD/NzEw9MzNzP83MTD3NzEw9AACAPwAAAAAzM3M/MzNzPwAAgD8AAIA/MzNzPzMzcz8AAAAAAACAPwAAgD8AAIA/AAAAAAAAgD/NzEw9MzNzP83MTD3NzEw9AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/zcxMPTMzcz8AAAAAAACAPzMzcz8zM3M/AACAPwAAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAzM3M/zcxMPTMzcz8zM3M/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/MzNzP83MTD0AAIA/AAAAAM3MTD3NzEw9AAAAAAAAgD/NzEw9zcxMPQAAAAAAAAAAzcxMPc3MTD0AAIA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAIA/AAAAAAAAAAAAAIA/AAAAAAAAgD8AAIA/AACAPwAAgD8AAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAIA/AACAPwAAgD8AAAAAAACAPwAAAAAAAAAAAAAAAAAAAAAAAIA/AAAAAAAAgD8AAIA/AACAPwAAgD8AAAAAAACAPwAAAAAAAAAAAACAPwAAgD8AAAAAAACAPwAAAAAAAAAA"),
|
||||
"format": 34359738391,
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 96,
|
||||
"vertex_data": PackedByteArray("AAAQwQAAwL8AABDBAAAgwQAAwL8AACDBAAAQwQAAwL8AABBBAAAgwQAAwL8AACBBAAAgwQAAwL8AACDBAAAgwQAAwD8AACDBAAAgwQAAwL8AACDBAAAQwQAAwL8AABDBAAAQQQAAwL8AABDBAAAgQQAAwL8AACDBAAAgwQAAwD8AACDBAAAgwQAAwL8AACDBAAAQwQAAwL8AABBBAAAgwQAAwL8AACDBAAAgwQAAwL8AACBBAAAgQQAAwL8AACBBAAAQwQAAwL8AABBBAAAgwQAAwL8AACBBAAAQwQAAwD8AABDBAAAgwQAAwD8AACBBAAAgwQAAwD8AACDBAAAgQQAAwD8AACDBAAAQwQAAwD8AABDBAAAgwQAAwD8AACDBAAAgwQAAwD8AACDBAAAgwQAAwD8AACBBAAAgwQAAwL8AACBBAAAQwQAAwD8AABBBAAAgwQAAwD8AACBBAAAQwQAAwD8AABDBAAAgwQAAwD8AACBBAAAgQQAAwD8AACBBAAAgwQAAwL8AACBBAAAgwQAAwD8AACBBAAAQwQAAwD8AABBBAAAQQQAAwD8AABBBAAAgwQAAwL8AACDBAAAQQQAAwL8AABDBAAAgQQAAwL8AACDBAAAQQQAAwL8AABDBAAAgQQAAwL8AACBBAAAgQQAAwL8AACDBAAAgQQAAwL8AACBBAAAQQQAAwL8AABBBAAAQwQAAwL8AABBBAAAgQQAAwD8AACBBAAAgQQAAwL8AACBBAAAgwQAAwL8AACBBAAAQQQAAwL8AABBBAAAgQQAAwL8AACBBAAAQQQAAwL8AABDBAAAgQQAAwL8AACBBAAAgQQAAwD8AACBBAAAgQQAAwL8AACDBAAAgQQAAwL8AACDBAAAgQQAAwD8AACDBAAAgwQAAwD8AACDBAAAgQQAAwD8AACDBAAAQQQAAwD8AABDBAAAQwQAAwD8AABDBAAAgQQAAwD8AACBBAAAgQQAAwD8AACDBAAAgQQAAwL8AACDBAAAQQQAAwD8AABDBAAAgQQAAwD8AACDBAAAQQQAAwD8AABBBAAAgwQAAwD8AACBBAAAQQQAAwD8AABBBAAAgQQAAwD8AACBBAAAQQQAAwD8AABBBAAAgQQAAwD8AACDBAAAgQQAAwD8AACBBAAAQwQAAwD8AABDBAAAQwQAAwL8AABDBAAAQwQAAwL8AABBBAAAQQQAAwL8AABDBAAAQwQAAwL8AABDBAAAQwQAAwD8AABDBAAAQwQAAwL8AABBBAAAQwQAAwD8AABBBAAAQwQAAwD8AABDBAAAQQQAAwD8AABBBAAAQwQAAwD8AABBBAAAQwQAAwL8AABBBAAAQwQAAwL8AABBBAAAQQQAAwL8AABBBAAAQQQAAwD8AABBBAAAQQQAAwD8AABBBAAAQQQAAwL8AABBBAAAQQQAAwL8AABDBAAAQwQAAwD8AABDBAAAQQQAAwD8AABDBAAAQQQAAwL8AABDBAAAQQQAAwL8AABDBAAAQQQAAwD8AABDBAAAQQQAAwD8AABBB/38AAP//AAD/fwAA//8AAP9/AAD//wAAAAD/f/9//n8AAP9//3/+fwAA/3//f/5//38AAP//AAD/fwAA//8AAP9/AAD//wAA/////wAA/z//////AAD/P/////8AAP8//38AAP//AAD/fwAA//8AAP9/AAD//wAA/38AAP//AAD/fwAA//8AAP9/AAD//wAA/3//////AAD/f///AAAAAP9//////wAA/3//////AAD/f/////8AAP9//////wAAAAD/f/9//n8AAP9//3/+fwAA/3//f/5//3///wAAAAD/f///AAAAAP9//////wAA/3//fwAA/z//f/9/AAD/P/9//38AAP8//3///wAAAAD/f///AAAAAP9///8AAAAA/38AAP//AAD/fwAA//8AAP9/AAD//wAA/38AAP//AAD/fwAA//8AAP9/AAD//wAA/38AAP//AAD/fwAA//8AAP9/AAD//wAA/3//fwAA/z//f/9/AAD/P/9//38AAP8//38AAP//AAD/fwAA//8AAP9/AAD//wAA////f/9//n////9//3/+f////3//f/5//////wAA/z//////AAD/P/////8AAP8//3//////AAD/f/////8AAP9//////wAA////f/9//n////9//3/+f////3//f/5//3//////AAD/f/////8AAP9///8AAAAA/3///wAAAAD/f///AAAAAP9//////wAA/3///wAAAAD/f/////8AAP9//////wAA////f/9/AID///9//38AgP///3//fwCA/3//fwAA/7//f/9/AAD/v/9//38AAP+/////f/9/AID///9//38AgP///3//fwCA/////wAA/7//////AAD/v/////8AAP+//////wAA/7//////AAD/v/////8AAP+/AAD/f/9/AIAAAP9//38AgAAA/3//fwCA/3//fwAA/7//f/9/AAD/v/9//38AAP+/AAD/f/9/AIAAAP9//38AgAAA/3//fwCA")
|
||||
}]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_ysrn6"]
|
||||
size = Vector3(20, 1, 20)
|
||||
|
||||
[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_5nkxg"]
|
||||
points = PackedVector3Array(-10, -0.5, -10, -10, 0.5, -10, 10, -0.5, -10, -10, -0.5, 10, -10, 0.5, 10, 10, 0.5, -10, 10, -0.5, 10, 10, 0.5, 10)
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_eoaoo"]
|
||||
data = PackedVector3Array(0.125, 1.5, 1.25, 0.125, 1.25, -1, 0.125, 1.25, 1, -0.125, -1.5, -1.25, -0.125, 1.25, -1, -0.125, -1.25, -1, -0.125, -1.5, 1.25, 0.125, -1.5, -1.25, -0.125, -1.5, -1.25, 0.125, -1.5, -1.25, -0.125, 1.5, -1.25, -0.125, -1.5, -1.25, -0.125, -1.5, 1.25, -0.125, -1.25, -1, -0.125, -1.25, 1, -0.125, -1.5, 1.25, -0.125, -1.25, 1, -0.125, 1.5, 1.25, -0.125, 1.5, -1.25, -0.125, 1.25, -1, -0.125, -1.5, -1.25, -0.125, 1.5, -1.25, -0.125, 1.25, 1, -0.125, 1.25, -1, -0.125, 1.5, 1.25, -0.125, -1.25, 1, -0.125, 1.25, 1, -0.125, 1.5, 1.25, -0.125, 1.25, 1, -0.125, 1.5, -1.25, -0.125, 1.5, 1.25, 0.125, 1.5, 1.25, -0.125, -1.5, 1.25, -0.125, 1.5, -1.25, 0.125, 1.5, 1.25, -0.125, 1.5, 1.25, -0.125, -1.5, -1.25, -0.125, -1.25, -1, -0.125, -1.5, 1.25, 0.125, -1.5, -1.25, 0.125, -1.25, 1, 0.125, -1.25, -1, 0.125, -1.5, -1.25, 0.125, -1.25, -1, 0.125, 1.5, -1.25, -0.125, -1.5, 1.25, 0.125, -1.5, 1.25, 0.125, -1.5, -1.25, 0.125, 1.5, 1.25, 0.125, -1.5, 1.25, -0.125, -1.5, 1.25, 0.125, -1.5, 1.25, 0.125, -1.25, 1, 0.125, -1.5, -1.25, 0.125, -1.5, 1.25, 0.125, 1.25, 1, 0.125, -1.25, 1, 0.125, -1.5, -1.25, 0.125, 1.5, -1.25, -0.125, 1.5, -1.25, 0.125, 1.5, -1.25, 0.125, 1.5, 1.25, -0.125, 1.5, -1.25, 0.125, 1.5, -1.25, 0.125, -1.25, -1, 0.125, 1.25, -1, 0.125, 1.5, -1.25, 0.125, 1.25, -1, 0.125, 1.5, 1.25, 0.125, 1.5, 1.25, 0.125, 1.25, 1, 0.125, -1.5, 1.25, 0.125, -1.25, -1, -0.125, -1.25, -1, -0.125, 1.25, -1, -0.125, -1.25, 1, -0.125, -1.25, -1, 0.125, -1.25, 1, -0.125, 1.25, -1, -0.125, 1.25, 1, 0.125, 1.25, -1, 0.125, 1.25, 1, -0.125, 1.25, 1, -0.125, -1.25, 1, -0.125, -1.25, 1, 0.125, -1.25, 1, 0.125, 1.25, 1, -0.125, 1.25, -1, 0.125, 1.25, -1, 0.125, -1.25, -1, 0.125, 1.25, 1, 0.125, 1.25, -1, -0.125, 1.25, 1, 0.125, -1.25, -1, 0.125, -1.25, 1, -0.125, -1.25, -1)
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_b88kk"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.125, -1.5, -1.25, 0.25, 3, 2.5),
|
||||
"attribute_data": PackedByteArray("AAAAAAAAAACrqqo9ZmZmP6uqqj3NzMw9AACAPwAAAACrqqo9zczMPauqaj/NzMw9AAAAAAAAAAAAAIA/AACAPwAAgD8AAAAAAAAAAAAAAAAAAIA/AACAPwAAgD8AAAAAAACAPwAAgD+rqmo/zczMPauqaj9mZmY/AACAPwAAgD+rqmo/ZmZmPwAAAAAAAIA/AAAAAAAAAACrqqo9zczMPQAAgD8AAAAAAAAAAAAAAACrqqo9ZmZmP6uqqj3NzMw9AAAAAAAAgD+rqmo/ZmZmP6uqqj1mZmY/AAAAAAAAgD+rqqo9ZmZmPwAAAAAAAAAAAACAPwAAAAAAAAAAAAAAAAAAgD8AAIA/AACAPwAAgD8AAAAAAAAAAAAAAAAAAIA/AACAPwAAAACrqmo/zczMPQAAgD8AAIA/AACAPwAAgD+rqmo/zczMPauqaj9mZmY/AACAPwAAgD+rqmo/ZmZmPwAAAAAAAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAACrqmo/zczMPQAAgD8AAIA/AACAPwAAAACrqqo9zczMPauqaj/NzMw9AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAgD+rqmo/ZmZmP6uqqj1mZmY/AAAAAAAAgD+rqqo9ZmZmPwAAAAAAAAAAAAAAAAAAAACrqqo9zczMPQAAgD8AAAAAAADAPgAAAAAAACA/AAAAAAAAID8AAIA/AAAAAAAAwD4AAIA/AADAPgAAAAAAACA/AACAPwAAID8AAAAAAAAgPwAAgD8AAMA+AADAPgAAAAAAACA/AAAAAAAAID8AAIA/AAAgPwAAgD8AAMA+AACAPwAAwD4AAAAAAAAgPwAAgD8AAMA+AACAPwAAwD4AAAAAAAAAAAAAwD4AAIA/AADAPgAAAAAAACA/AACAPwAAID8AAAAAAAAgPwAAgD8AAMA+"),
|
||||
"format": 34359738391,
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 96,
|
||||
"vertex_data": PackedByteArray("AAAAPgAAwD8AAKA/AAAAPgAAoD8AAIC/AAAAPgAAoD8AAIA/AAAAvgAAwL8AAKC/AAAAvgAAoD8AAIC/AAAAvgAAoL8AAIC/AAAAvgAAwL8AAKA/AAAAPgAAwL8AAKC/AAAAvgAAwL8AAKC/AAAAPgAAwL8AAKC/AAAAvgAAwD8AAKC/AAAAvgAAwL8AAKC/AAAAvgAAwL8AAKA/AAAAvgAAoL8AAIC/AAAAvgAAoL8AAIA/AAAAvgAAwL8AAKA/AAAAvgAAoL8AAIA/AAAAvgAAwD8AAKA/AAAAvgAAwD8AAKC/AAAAvgAAoD8AAIC/AAAAvgAAwL8AAKC/AAAAvgAAwD8AAKC/AAAAvgAAoD8AAIA/AAAAvgAAoD8AAIC/AAAAvgAAwD8AAKA/AAAAvgAAoL8AAIA/AAAAvgAAoD8AAIA/AAAAvgAAwD8AAKA/AAAAvgAAoD8AAIA/AAAAvgAAwD8AAKC/AAAAvgAAwD8AAKA/AAAAPgAAwD8AAKA/AAAAvgAAwL8AAKA/AAAAvgAAwD8AAKC/AAAAPgAAwD8AAKA/AAAAvgAAwD8AAKA/AAAAvgAAwL8AAKC/AAAAvgAAoL8AAIC/AAAAvgAAwL8AAKA/AAAAPgAAwL8AAKC/AAAAPgAAoL8AAIA/AAAAPgAAoL8AAIC/AAAAPgAAwL8AAKC/AAAAPgAAoL8AAIC/AAAAPgAAwD8AAKC/AAAAvgAAwL8AAKA/AAAAPgAAwL8AAKA/AAAAPgAAwL8AAKC/AAAAPgAAwD8AAKA/AAAAPgAAwL8AAKA/AAAAvgAAwL8AAKA/AAAAPgAAwL8AAKA/AAAAPgAAoL8AAIA/AAAAPgAAwL8AAKC/AAAAPgAAwL8AAKA/AAAAPgAAoD8AAIA/AAAAPgAAoL8AAIA/AAAAPgAAwL8AAKC/AAAAPgAAwD8AAKC/AAAAvgAAwD8AAKC/AAAAPgAAwD8AAKC/AAAAPgAAwD8AAKA/AAAAvgAAwD8AAKC/AAAAPgAAwD8AAKC/AAAAPgAAoL8AAIC/AAAAPgAAoD8AAIC/AAAAPgAAwD8AAKC/AAAAPgAAoD8AAIC/AAAAPgAAwD8AAKA/AAAAPgAAwD8AAKA/AAAAPgAAoD8AAIA/AAAAPgAAwL8AAKA/AAAAPgAAoL8AAIC/AAAAvgAAoL8AAIC/AAAAvgAAoD8AAIC/AAAAvgAAoL8AAIA/AAAAvgAAoL8AAIC/AAAAPgAAoL8AAIA/AAAAvgAAoD8AAIC/AAAAvgAAoD8AAIA/AAAAPgAAoD8AAIC/AAAAPgAAoD8AAIA/AAAAvgAAoD8AAIA/AAAAvgAAoL8AAIA/AAAAvgAAoL8AAIA/AAAAPgAAoL8AAIA/AAAAPgAAoD8AAIA/AAAAvgAAoD8AAIC/AAAAPgAAoD8AAIC/AAAAPgAAoL8AAIC/AAAAPgAAoD8AAIA/AAAAPgAAoD8AAIC/AAAAvgAAoD8AAIA/AAAAPgAAoL8AAIC/AAAAPgAAoL8AAIA/AAAAvgAAoL8AAIC/////f/9//n////9//3/+f////3//f/5/AAD/f/9//n8AAP9//3/+fwAA/3//f/5//38AAP//AAD/fwAA//8AAP9/AAD//wAA/////wAA/z//////AAD/P/////8AAP8/AAD/f/9//n8AAP9//3/+fwAA/3//f/5/AAD/f/9//n8AAP9//3/+fwAA/3//f/5/AAD/f/9//n8AAP9//3/+fwAA/3//f/5/AAD/f/9//n8AAP9//3/+fwAA/3//f/5/AAD/f/9//n8AAP9//3/+fwAA/3//f/5/AAD/f/9//n8AAP9//3/+fwAA/3//f/5//3//fwAA/z//f/9/AAD/P/9//38AAP8//3//////AAD/f/////8AAP9//////wAAAAD/f/9//n8AAP9//3/+fwAA/3//f/5/////f/9//n////9//3/+f////3//f/5/////f/9//n////9//3/+f////3//f/5//38AAP//AAD/fwAA//8AAP9/AAD//wAA/3//fwAA/z//f/9/AAD/P/9//38AAP8/////f/9//n////9//3/+f////3//f/5/////f/9//n////9//3/+f////3//f/5//////wAA/z//////AAD/P/////8AAP8//3//////AAD/f/////8AAP9//////wAA////f/9//n////9//3/+f////3//f/5/////f/9//n////9//3/+f////3//f/5/////f/9//n////9//3/+f////3//f/5//3//fwAA/7//f/9/AAD/v/9//38AAP+//3//////////f/////////9//////////38AAP//////fwAA//////9/AAD//////////wAA/7//////AAD/v/////8AAP+//////wAA/7//////AAD/v/////8AAP+//3//fwAA/7//f/9/AAD/v/9//38AAP+//38AAP//////fwAA//////9/AAD//////3//////////f/////////9/////////")
|
||||
}]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_pvdtj"]
|
||||
material = ExtResource("6_2ffpc")
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_pccqs"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-1, -1.25, -0.1, 2, 2.5, 0.1),
|
||||
"attribute_data": PackedByteArray("AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAgD/NzEw9CtcjPTMzcz8K1yM9zcxMPY/CdT8zM3M/j8J1Pw=="),
|
||||
"format": 34359742487,
|
||||
"index_count": 30,
|
||||
"index_data": PackedByteArray("AAABAAQABAABAAUAAQADAAUABQADAAcAAwACAAcABwACAAYAAgAAAAYABgAAAAQABAAFAAYABgAFAAcA"),
|
||||
"name": "Portal Material",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 8,
|
||||
"vertex_data": PackedByteArray("AACAvwAAoD8AAAAAAACAPwAAoD8AAAAAAACAvwAAoL8AAAAAAACAPwAAoL8AAAAAZmZmvzMzkz/NzMy9ZmZmPzMzkz/NzMy9ZmZmvzMzk7/NzMy9ZmZmPzMzk7/NzMy9/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==")
|
||||
}]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_pccqs"]
|
||||
material = ExtResource("8_dhtg5")
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_pvdtj"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-1, -1.25, -0.1, 2, 2.5, 0.1),
|
||||
"attribute_data": PackedByteArray("AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAgD/NzEw9CtcjPTMzcz8K1yM9zcxMPY/CdT8zM3M/j8J1Pw=="),
|
||||
"format": 34359742487,
|
||||
"index_count": 30,
|
||||
"index_data": PackedByteArray("AAABAAQABAABAAUAAQADAAUABQADAAcAAwACAAcABwACAAYAAgAAAAYABgAAAAQABAAFAAYABgAFAAcA"),
|
||||
"name": "Portal Material",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 8,
|
||||
"vertex_data": PackedByteArray("AACAvwAAoD8AAAAAAACAPwAAoD8AAAAAAACAvwAAoL8AAAAAAACAPwAAoL8AAAAAZmZmvzMzkz/NzMy9ZmZmPzMzkz/NzMy9ZmZmvzMzk7/NzMy9ZmZmPzMzk7/NzMy9/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==")
|
||||
}]
|
||||
|
||||
[node name="World" type="Node3D"]
|
||||
script = ExtResource("1_pccqs")
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0)
|
||||
shadow_enabled = true
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_b88kk")
|
||||
|
||||
[node name="PortalEnvironmentAdapter" parent="." node_paths=PackedStringArray("base") instance=ExtResource("1_eoaoo")]
|
||||
base = NodePath("../WorldEnvironment")
|
||||
|
||||
[node name="HUD" parent="." instance=ExtResource("4_t21k5")]
|
||||
offset_right = 219.0
|
||||
offset_bottom = 77.0
|
||||
|
||||
[node name="TransportToGreen" type="Button" parent="HUD"]
|
||||
layout_mode = 2
|
||||
text = "Transport to green"
|
||||
|
||||
[node name="TransportToOrange" type="Button" parent="HUD"]
|
||||
layout_mode = 2
|
||||
text = "Transport to orange"
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("3_ysrn6")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.68722, 0.942887, -13.7212)
|
||||
|
||||
[node name="Orange" type="Node3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -12)
|
||||
|
||||
[node name="Room" type="Node3D" parent="Orange"]
|
||||
|
||||
[node name="Wall" type="StaticBody3D" parent="Orange/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
||||
|
||||
[node name="CSGBakedCollisionShape3D" type="CollisionShape3D" parent="Orange/Room/Wall"]
|
||||
visible = false
|
||||
shape = SubResource("ConcavePolygonShape3D_7nftg")
|
||||
|
||||
[node name="CSGBakedMeshInstance3D" type="MeshInstance3D" parent="Orange/Room/Wall"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
visible = false
|
||||
material_override = ExtResource("1_v6nyh")
|
||||
mesh = SubResource("ArrayMesh_v6nyh")
|
||||
|
||||
[node name="Ground" type="StaticBody3D" parent="Orange/Room"]
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Orange/Room/Ground"]
|
||||
material_override = ExtResource("2_5nkxg")
|
||||
mesh = SubResource("BoxMesh_ysrn6")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Orange/Room/Ground"]
|
||||
shape = SubResource("ConvexPolygonShape3D_5nkxg")
|
||||
|
||||
[node name="PortalFrame" type="StaticBody3D" parent="Orange/Room"]
|
||||
|
||||
[node name="PortalFrame" type="CollisionShape3D" parent="Orange/Room/PortalFrame"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||
shape = SubResource("ConcavePolygonShape3D_eoaoo")
|
||||
|
||||
[node name="PortalFrameCollision" type="MeshInstance3D" parent="Orange/Room/PortalFrame"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||
material_override = ExtResource("1_v6nyh")
|
||||
mesh = SubResource("ArrayMesh_b88kk")
|
||||
|
||||
[node name="Cube" type="MeshInstance3D" parent="Orange/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 1, -3.5)
|
||||
mesh = SubResource("BoxMesh_pvdtj")
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="Cube2" type="MeshInstance3D" parent="Orange/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5, 1, -6.5)
|
||||
mesh = SubResource("BoxMesh_pvdtj")
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="Cube3" type="MeshInstance3D" parent="Orange/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.5, 1, -1)
|
||||
mesh = SubResource("BoxMesh_pvdtj")
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="Cube4" type="MeshInstance3D" parent="Orange/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 1, 1)
|
||||
mesh = SubResource("BoxMesh_pvdtj")
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="Cube5" type="MeshInstance3D" parent="Orange/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 1, 3)
|
||||
mesh = SubResource("BoxMesh_pvdtj")
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="OrangePortal" type="MeshInstance3D" parent="Orange" node_paths=PackedStringArray("exit_portal")]
|
||||
transform = Transform3D(1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 0, 2, 0)
|
||||
mesh = SubResource("ArrayMesh_pccqs")
|
||||
skeleton = NodePath("../..")
|
||||
script = ExtResource("7_pvdtj")
|
||||
exit_portal = NodePath("../../Green/GreenPortal")
|
||||
|
||||
[node name="Green" type="Node3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 12.5)
|
||||
|
||||
[node name="Room" type="Node3D" parent="Green"]
|
||||
|
||||
[node name="Wall" type="StaticBody3D" parent="Green/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
||||
|
||||
[node name="CSGBakedCollisionShape3D" type="CollisionShape3D" parent="Green/Room/Wall"]
|
||||
visible = false
|
||||
shape = SubResource("ConcavePolygonShape3D_7nftg")
|
||||
|
||||
[node name="CSGBakedMeshInstance3D" type="MeshInstance3D" parent="Green/Room/Wall"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
|
||||
visible = false
|
||||
material_override = ExtResource("1_v6nyh")
|
||||
mesh = SubResource("ArrayMesh_v6nyh")
|
||||
|
||||
[node name="Ground" type="StaticBody3D" parent="Green/Room"]
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Green/Room/Ground"]
|
||||
material_override = ExtResource("6_b88kk")
|
||||
mesh = SubResource("BoxMesh_ysrn6")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Green/Room/Ground"]
|
||||
shape = SubResource("ConvexPolygonShape3D_5nkxg")
|
||||
|
||||
[node name="PortalFrame" type="StaticBody3D" parent="Green/Room"]
|
||||
|
||||
[node name="PortalFrame" type="CollisionShape3D" parent="Green/Room/PortalFrame"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||
shape = SubResource("ConcavePolygonShape3D_eoaoo")
|
||||
|
||||
[node name="PortalFrameCollision" type="MeshInstance3D" parent="Green/Room/PortalFrame"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
|
||||
material_override = ExtResource("1_v6nyh")
|
||||
mesh = SubResource("ArrayMesh_b88kk")
|
||||
|
||||
[node name="Ball6" type="MeshInstance3D" parent="Green/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 1, -3.5)
|
||||
mesh = SubResource("SphereMesh_pccqs")
|
||||
skeleton = NodePath("../../../Orange")
|
||||
|
||||
[node name="Ball7" type="MeshInstance3D" parent="Green/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.5, 1, -6.5)
|
||||
mesh = SubResource("SphereMesh_pccqs")
|
||||
skeleton = NodePath("../../../Orange")
|
||||
|
||||
[node name="Ball8" type="MeshInstance3D" parent="Green/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.5, 1, -1)
|
||||
mesh = SubResource("SphereMesh_pccqs")
|
||||
skeleton = NodePath("../../../Orange")
|
||||
|
||||
[node name="Ball9" type="MeshInstance3D" parent="Green/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 1, 1)
|
||||
mesh = SubResource("SphereMesh_pccqs")
|
||||
skeleton = NodePath("../../../Orange")
|
||||
|
||||
[node name="Ball10" type="MeshInstance3D" parent="Green/Room"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 1, 3)
|
||||
mesh = SubResource("SphereMesh_pccqs")
|
||||
skeleton = NodePath("../../../Orange")
|
||||
|
||||
[node name="GreenPortal" type="MeshInstance3D" parent="Green" node_paths=PackedStringArray("exit_portal")]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 2, 0)
|
||||
mesh = SubResource("ArrayMesh_pvdtj")
|
||||
skeleton = NodePath("../..")
|
||||
script = ExtResource("7_pvdtj")
|
||||
exit_portal = NodePath("../../Orange/OrangePortal")
|
||||
|
||||
[node name="ProceduralMeshMaker" parent="." node_paths=PackedStringArray("portal") instance=ExtResource("9_dhtg5")]
|
||||
portal = NodePath("../Orange/OrangePortal")
|
||||
height = 2.5
|
||||
width = 2.0
|
||||
|
||||
[connection signal="pressed" from="HUD/TransportToGreen" to="." method="_on_transport_to_green_pressed"]
|
||||
[connection signal="pressed" from="HUD/TransportToOrange" to="." method="_on_transport_to_orange_pressed"]
|
@ -1,14 +1,14 @@
|
||||
[gd_scene load_steps=13 format=3 uid="uid://c0uk51mh24sl6"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cjd40tsurltut" path="res://addons/platformer-assets/block-grass-large.glb" id="1_1wwjl"]
|
||||
[ext_resource type="PackedScene" uid="uid://cgdlowfuuorvi" path="res://player.tscn" id="3_7knre"]
|
||||
[ext_resource type="PackedScene" uid="uid://c6u7a7bisra5b" path="res://addons/platformer-assets/flowers.glb" id="3_qvh7i"]
|
||||
[ext_resource type="PackedScene" uid="uid://2oao5c24w74u" path="res://addons/platformer-assets/grass.glb" id="4_wg85y"]
|
||||
[ext_resource type="PackedScene" uid="uid://btdarsbrym1d4" path="res://addons/platformer-assets/flag.glb" id="5_r0or3"]
|
||||
[ext_resource type="Script" uid="uid://d2bvvjsibau8c" path="res://addons/simple-portal-system/scripts/portal.gd" id="5_wg85y"]
|
||||
[ext_resource type="Script" uid="uid://bkv7t4hw21byg" path="res://addons/simple-portal-system/scripts/simple_portal_teleport.gd" id="6_3fidx"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://bqilnvlfws6xh" path="res://portal-mesh.tres" id="7_hwdx8"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5x7fmpwck335" path="res://hud.tscn" id="9_2wcgd"]
|
||||
[ext_resource type="PackedScene" uid="uid://cgdlowfuuorvi" path="res://player.tscn" id="1_wmc81"]
|
||||
[ext_resource type="PackedScene" uid="uid://cjd40tsurltut" path="res://addons/platformer-assets/block-grass-large.glb" id="2_6nhbe"]
|
||||
[ext_resource type="PackedScene" uid="uid://c6u7a7bisra5b" path="res://addons/platformer-assets/flowers.glb" id="3_uxyox"]
|
||||
[ext_resource type="PackedScene" uid="uid://2oao5c24w74u" path="res://addons/platformer-assets/grass.glb" id="4_p6b85"]
|
||||
[ext_resource type="PackedScene" uid="uid://btdarsbrym1d4" path="res://addons/platformer-assets/flag.glb" id="5_a4n4h"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://bqilnvlfws6xh" path="res://portal-mesh.tres" id="6_21xnk"]
|
||||
[ext_resource type="Script" uid="uid://d2bvvjsibau8c" path="res://addons/simple-portal-system/scripts/portal.gd" id="7_8mrlp"]
|
||||
[ext_resource type="Script" uid="uid://bkv7t4hw21byg" path="res://addons/simple-portal-system/scripts/simple_portal_teleport.gd" id="8_kco3g"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5x7fmpwck335" path="res://hud.tscn" id="9_afarl"]
|
||||
|
||||
[sub_resource type="Environment" id="Environment_7knre"]
|
||||
background_mode = 1
|
||||
@ -30,12 +30,12 @@ shadow_enabled = true
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_7knre")
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("3_7knre")]
|
||||
[node name="Player" parent="." instance=ExtResource("1_wmc81")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.84696, 1.60873, -1.16561)
|
||||
|
||||
[node name="Island" type="Node3D" parent="."]
|
||||
|
||||
[node name="block-grass-large2" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large2" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, 5)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large2"]
|
||||
@ -44,7 +44,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, 5)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large3" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large3" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, 5)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large3"]
|
||||
@ -53,7 +53,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, 5)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large4" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large4" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, 3)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large4"]
|
||||
@ -62,7 +62,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, 3)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large5" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large5" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, 3)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large5"]
|
||||
@ -71,7 +71,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, 3)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large6" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large6" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 5)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large6"]
|
||||
@ -80,7 +80,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 5)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large7" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large7" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 5)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large7"]
|
||||
@ -89,7 +89,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 5)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large8" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large8" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 3)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large8"]
|
||||
@ -98,7 +98,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 3)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large9" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large9" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 3)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large9"]
|
||||
@ -107,7 +107,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 3)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large10" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large10" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, 1)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large10"]
|
||||
@ -116,7 +116,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, 1)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large11" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large11" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, 1)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large11"]
|
||||
@ -125,7 +125,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, 1)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large12" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large12" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large12"]
|
||||
@ -134,7 +134,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large13" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large13" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 1)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large13"]
|
||||
@ -143,7 +143,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 1)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large14" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large14" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, -1)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large14"]
|
||||
@ -152,7 +152,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, -1)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large15" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large15" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, -1)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large15"]
|
||||
@ -161,7 +161,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, -1)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large16" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large16" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, -3)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large16"]
|
||||
@ -170,7 +170,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, -3)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large17" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large17" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, -3)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large17"]
|
||||
@ -179,7 +179,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, -3)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large18" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large18" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, -1)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large18"]
|
||||
@ -188,7 +188,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, -1)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large19" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large19" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, -1)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large19"]
|
||||
@ -197,7 +197,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, -1)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large20" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large20" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, -3)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large20"]
|
||||
@ -206,7 +206,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, -3)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large21" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large21" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, -3)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large21"]
|
||||
@ -215,7 +215,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, -3)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large22" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large22" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, -5)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large22"]
|
||||
@ -224,7 +224,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3, 0, -5)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large23" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large23" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, -5)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large23"]
|
||||
@ -233,7 +233,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 0, -5)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large24" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large24" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, -5)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large24"]
|
||||
@ -242,7 +242,7 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, -5)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="block-grass-large25" parent="Island" instance=ExtResource("1_1wwjl")]
|
||||
[node name="block-grass-large25" parent="Island" instance=ExtResource("2_6nhbe")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, -5)
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Island/block-grass-large25"]
|
||||
@ -251,24 +251,24 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, -5)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.005, 0.5, 0)
|
||||
shape = SubResource("BoxShape3D_1wwjl")
|
||||
|
||||
[node name="flowers" parent="Island" instance=ExtResource("3_qvh7i")]
|
||||
[node name="flowers" parent="Island" instance=ExtResource("3_uxyox")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.31658, 1, 4.77017)
|
||||
|
||||
[node name="flowers2" parent="Island" instance=ExtResource("3_qvh7i")]
|
||||
[node name="flowers2" parent="Island" instance=ExtResource("3_uxyox")]
|
||||
transform = Transform3D(0.82088, 0, -0.5711, 0, 1, 0, 0.5711, 0, 0.82088, 2.6032, 1, 2.60677)
|
||||
|
||||
[node name="grass2" parent="Island" instance=ExtResource("4_wg85y")]
|
||||
[node name="grass2" parent="Island" instance=ExtResource("4_p6b85")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.44316, 1, 0.59875)
|
||||
|
||||
[node name="flag2" parent="Island" instance=ExtResource("5_r0or3")]
|
||||
[node name="flag2" parent="Island" instance=ExtResource("5_a4n4h")]
|
||||
transform = Transform3D(-0.896199, 0, 3.34466, 0, 3.46265, 0, -3.34466, 0, -0.896199, -3.34096, 1, -5.4095)
|
||||
|
||||
[node name="P_bottom" type="MeshInstance3D" parent="." node_paths=PackedStringArray("exit_portal")]
|
||||
transform = Transform3D(-20, -1.74846e-06, -3.82137e-15, 0, -8.74228e-07, 1, -1.74846e-06, 20, 4.37114e-08, 0, -15, 0)
|
||||
layers = 2
|
||||
cast_shadow = 0
|
||||
mesh = ExtResource("7_hwdx8")
|
||||
script = ExtResource("5_wg85y")
|
||||
mesh = ExtResource("6_21xnk")
|
||||
script = ExtResource("7_8mrlp")
|
||||
vertical_viewport_resolution = 1080
|
||||
disable_viewport_distance = 55.0
|
||||
destroy_disabled_viewport = false
|
||||
@ -279,7 +279,7 @@ exit_cull_mask = 1048573
|
||||
exit_portal = NodePath("../P_top")
|
||||
|
||||
[node name="Teleport" type="Area3D" parent="P_bottom"]
|
||||
script = ExtResource("6_3fidx")
|
||||
script = ExtResource("8_kco3g")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="P_bottom/Teleport"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, -2.88658e-14, 0, 7.16227e-12, 1, 0, -3.55271e-15, -4.39912)
|
||||
@ -289,8 +289,8 @@ shape = SubResource("BoxShape3D_2wcgd")
|
||||
transform = Transform3D(20, 0, 0, 0, -8.74228e-07, -1.1, 0, 20, -4.80825e-08, 0, 15, 0)
|
||||
layers = 2
|
||||
cast_shadow = 0
|
||||
mesh = ExtResource("7_hwdx8")
|
||||
script = ExtResource("5_wg85y")
|
||||
mesh = ExtResource("6_21xnk")
|
||||
script = ExtResource("7_8mrlp")
|
||||
vertical_viewport_resolution = 1080
|
||||
disable_viewport_distance = 55.0
|
||||
destroy_disabled_viewport = false
|
||||
@ -300,4 +300,4 @@ fade_out_color = Color(0.590126, 0.615058, 0.699408, 1)
|
||||
exit_cull_mask = 1048573
|
||||
exit_portal = NodePath("../P_bottom")
|
||||
|
||||
[node name="HUD" parent="." instance=ExtResource("9_2wcgd")]
|
||||
[node name="HUD" parent="." instance=ExtResource("9_afarl")]
|
113
levels/level_semaphore_lights.tscn
Normal file
113
levels/level_semaphore_lights.tscn
Normal file
File diff suppressed because one or more lines are too long
159
levels/level_test_portal_delay.tscn
Normal file
159
levels/level_test_portal_delay.tscn
Normal file
@ -0,0 +1,159 @@
|
||||
[gd_scene load_steps=19 format=4 uid="uid://b2c27cvkqvhbi"]
|
||||
|
||||
[ext_resource type="Material" uid="uid://bx6qeabdhq2s" path="res://addons/kenney_prototype_tools/materials/dark/material_01.tres" id="1_kvwhs"]
|
||||
[ext_resource type="PackedScene" uid="uid://b5x7fmpwck335" path="res://hud.tscn" id="2_hpe2j"]
|
||||
[ext_resource type="PackedScene" uid="uid://cgdlowfuuorvi" path="res://player.tscn" id="3_mc50s"]
|
||||
[ext_resource type="Script" uid="uid://d2bvvjsibau8c" path="res://addons/simple-portal-system/scripts/portal.gd" id="4_hg00i"]
|
||||
[ext_resource type="PackedScene" uid="uid://d1dtxvwk86ple" path="res://procedural_mesh_maker.tscn" id="5_ka6qt"]
|
||||
[ext_resource type="PackedScene" uid="uid://cxopylew5786r" path="res://portal_environment_adapter.tscn" id="6_ka6qt"]
|
||||
[ext_resource type="PackedScene" uid="uid://dn8qt0qwx4sfs" path="res://addons/kenney_prototype_tools/scenes/orange/orange_02.tscn" id="7_o2k5d"]
|
||||
[ext_resource type="Material" uid="uid://uylhy3ucrinn" path="res://addons/kenney_prototype_tools/materials/purple/material_04.tres" id="8_25cs0"]
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_sjb6i"]
|
||||
sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
|
||||
ground_horizon_color = Color(0.662243, 0.671743, 0.686743, 1)
|
||||
|
||||
[sub_resource type="Sky" id="Sky_o2k5d"]
|
||||
sky_material = SubResource("ProceduralSkyMaterial_sjb6i")
|
||||
|
||||
[sub_resource type="Environment" id="Environment_25cs0"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_o2k5d")
|
||||
tonemap_mode = 2
|
||||
glow_enabled = true
|
||||
|
||||
[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_fdix6"]
|
||||
points = PackedVector3Array(-10, -0.5, -10, -10, 0.5, -10, 10, -0.5, -10, -10, -0.5, 10, -10, 0.5, 10, 10, 0.5, -10, 10, -0.5, 10, 10, 0.5, 10)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_hpe2j"]
|
||||
size = Vector3(20, 1, 20)
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_hg00i"]
|
||||
data = PackedVector3Array(-1, -1.125, -0.25, -1, -1.125, 0.25, -0.75, -1.125, -0.25, 0.75, 0.875, 0.25, 1, 1.125, 0.25, 0.75, -1.125, 0.25, -1, -1.125, 0.25, -1, -1.125, -0.25, -1, 1.125, -0.25, -0.75, -1.125, -0.25, -1, -1.125, 0.25, -0.75, -1.125, 0.25, -0.75, -1.125, 0.25, -1, -1.125, 0.25, -0.75, 0.875, 0.25, -0.75, 0.875, -0.25, -1, 1.125, -0.25, -0.75, -1.125, -0.25, -0.75, 0.875, -0.25, 1, 1.125, -0.25, -1, 1.125, -0.25, -1, 1.125, -0.25, -1, 1.125, 0.25, -1, -1.125, 0.25, -1, 1.125, 0.25, -0.75, 0.875, 0.25, -1, -1.125, 0.25, -1, 1.125, -0.25, 1, 1.125, 0.25, -1, 1.125, 0.25, -0.75, 0.875, 0.25, -1, 1.125, 0.25, 0.75, 0.875, 0.25, 1, -1.125, -0.25, 0.75, -1.125, -0.25, 1, -1.125, 0.25, -1, -1.125, -0.25, -0.75, -1.125, -0.25, -1, 1.125, -0.25, 0.75, -1.125, -0.25, 1, -1.125, -0.25, 0.75, 0.875, -0.25, 1, -1.125, 0.25, 0.75, -1.125, -0.25, 0.75, -1.125, 0.25, 1, -1.125, 0.25, 1, 1.125, 0.25, 1, -1.125, -0.25, 1, -1.125, 0.25, 0.75, -1.125, 0.25, 1, 1.125, 0.25, 0.75, 0.875, -0.25, 1, 1.125, -0.25, -0.75, 0.875, -0.25, 1, 1.125, -0.25, 1, 1.125, 0.25, -1, 1.125, -0.25, 1, 1.125, -0.25, 0.75, 0.875, -0.25, 1, -1.125, -0.25, 1, 1.125, 0.25, 1, 1.125, -0.25, 1, -1.125, -0.25, 0.75, 0.875, 0.25, -1, 1.125, 0.25, 1, 1.125, 0.25, -0.75, 0.875, 0.25, -0.75, -1.125, -0.25, -0.75, -1.125, 0.25, -0.75, -1.125, -0.25, -0.75, 0.875, 0.25, -0.75, 0.875, -0.25, 0.75, 0.875, -0.25, 0.75, -1.125, 0.25, 0.75, -1.125, -0.25, 0.75, 0.875, 0.25, 0.75, 0.875, -0.25, -0.75, 0.875, -0.25, 0.75, -1.125, 0.25, 0.75, 0.875, -0.25, 0.75, 0.875, 0.25, -0.75, 0.875, -0.25, -0.75, 0.875, 0.25, 0.75, 0.875, 0.25)
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_ka6qt"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-1, -1.125, -0.25, 2, 2.25, 0.5),
|
||||
"attribute_data": PackedByteArray("AACAPwAAAAAAAAAAAAAAAAAAgD8AAAA+AAAAPjmO4z0AAAAAAAAAAAAAAD4AAIA/AACAPwAAgD8AAIA/AAAAAAAAAAAAAAAAAACAPwAAAD4AAAAAAAAAAAAAAAAAAAA+AABgPwAAgD8AAIA/AACAPwAAYD85juM9AABgPzmOYz8AAIA/AACAPwAAYD8AAAAAAABgPzmOYz8AAAAAAACAPwAAgD8AAIA/AAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AACAPwAAAAAAAGA/OY7jPQAAgD8AAIA/AACAPwAAgD8AAAAAAAAAAAAAAAAAAIA/AABgPzmO4z0AAIA/AAAAAAAAAD45juM9AACAPwAAgD8AAIA/AABgPwAAAAAAAIA/AACAPwAAAAAAAGA/AAAAAAAAgD8AAIA/AAAAPgAAAAAAAAAAAAAAAAAAAD45jmM/AAAAAAAAgD8AAIA/AABgPwAAAAAAAGA/AACAPwAAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAgD8AAAA+AACAPwAAAAAAAAAAAAAAPjmOYz8AAAAAAACAPwAAYD85jmM/AACAPwAAAAAAAAAAAAAAAAAAgD8AAIA/AAAAAAAAgD8AAAA+OY5jPwAAAAAAAAAAAAAAAAAAAAAAAAAAAACAPwAAgD8AAIA/AAAAPjmO4z0AAIA/AAAAAAAAAAAAAAAAAAAAAAAAQD8AAIA/AACAPgAAgD8AAEA/AACAPwAAgD4AAAAAAABAPwAAAAAAAIA+AAAAAAAAQD8AAIA/AACAPgAAgD8AAEA/AACAPgAAAAAAAEA/AAAAAAAAQD8AAIA/AACAPwAAgD4AAAAAAABAPwAAAAAAAIA+AABAPwAAgD8AAIA+AACAPwAAgD4AAAAA"),
|
||||
"format": 34359738391,
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 84,
|
||||
"vertex_data": PackedByteArray("AACAvwAAkL8AAIC+AACAvwAAkL8AAIA+AABAvwAAkL8AAIC+AABAPwAAYD8AAIA+AACAPwAAkD8AAIA+AABAPwAAkL8AAIA+AACAvwAAkL8AAIA+AACAvwAAkL8AAIC+AACAvwAAkD8AAIC+AABAvwAAkL8AAIC+AACAvwAAkL8AAIA+AABAvwAAkL8AAIA+AABAvwAAkL8AAIA+AACAvwAAkL8AAIA+AABAvwAAYD8AAIA+AABAvwAAYD8AAIC+AACAvwAAkD8AAIC+AABAvwAAkL8AAIC+AABAvwAAYD8AAIC+AACAPwAAkD8AAIC+AACAvwAAkD8AAIC+AACAvwAAkD8AAIC+AACAvwAAkD8AAIA+AACAvwAAkL8AAIA+AACAvwAAkD8AAIA+AABAvwAAYD8AAIA+AACAvwAAkL8AAIA+AACAvwAAkD8AAIC+AACAPwAAkD8AAIA+AACAvwAAkD8AAIA+AABAvwAAYD8AAIA+AACAvwAAkD8AAIA+AABAPwAAYD8AAIA+AACAPwAAkL8AAIC+AABAPwAAkL8AAIC+AACAPwAAkL8AAIA+AACAvwAAkL8AAIC+AABAvwAAkL8AAIC+AACAvwAAkD8AAIC+AABAPwAAkL8AAIC+AACAPwAAkL8AAIC+AABAPwAAYD8AAIC+AACAPwAAkL8AAIA+AABAPwAAkL8AAIC+AABAPwAAkL8AAIA+AACAPwAAkL8AAIA+AACAPwAAkD8AAIA+AACAPwAAkL8AAIC+AACAPwAAkL8AAIA+AABAPwAAkL8AAIA+AACAPwAAkD8AAIA+AABAPwAAYD8AAIC+AACAPwAAkD8AAIC+AABAvwAAYD8AAIC+AACAPwAAkD8AAIC+AACAPwAAkD8AAIA+AACAvwAAkD8AAIC+AACAPwAAkD8AAIC+AABAPwAAYD8AAIC+AACAPwAAkL8AAIC+AACAPwAAkD8AAIA+AACAPwAAkD8AAIC+AACAPwAAkL8AAIC+AABAPwAAYD8AAIA+AACAvwAAkD8AAIA+AACAPwAAkD8AAIA+AABAvwAAYD8AAIA+AABAvwAAkL8AAIC+AABAvwAAkL8AAIA+AABAvwAAkL8AAIC+AABAvwAAYD8AAIA+AABAvwAAYD8AAIC+AABAPwAAYD8AAIC+AABAPwAAkL8AAIA+AABAPwAAkL8AAIC+AABAPwAAYD8AAIA+AABAPwAAYD8AAIC+AABAvwAAYD8AAIC+AABAPwAAkL8AAIA+AABAPwAAYD8AAIC+AABAPwAAYD8AAIA+AABAvwAAYD8AAIC+AABAvwAAYD8AAIA+AABAPwAAYD8AAIA+/38AAP//AAD/fwAA//8AAP9/AAD//wAA/3//fwAA/z//f/9/AAD/P/9//38AAP8/AAD/f/9//n8AAP9//3/+fwAA/3//f/5//38AAP//AAD/fwAA//8AAP9/AAD//wAA/3//fwAA/z//f/9/AAD/P/9//38AAP8//////wAA/z//////AAD/P/////8AAP8//////wAA/z//////AAD/P/////8AAP8/AAD/f/9//n8AAP9//3/+fwAA/3//f/5//3//fwAA/z//f/9/AAD/P/9//38AAP8//3//////AAD/f/////8AAP9//////wAA/3//fwAA/z//f/9/AAD/P/9//38AAP8//38AAP//AAD/fwAA//8AAP9/AAD//wAA/////wAA/z//////AAD/P/////8AAP8//////wAA/z//////AAD/P/////8AAP8//38AAP//AAD/fwAA//8AAP9/AAD//wAA////f/9//n////9//3/+f////3//f/5//3//fwAA/z//f/9/AAD/P/9//38AAP8//////wAA/z//////AAD/P/////8AAP8//3//////AAD/f/////8AAP9//////wAA/////wAA/z//////AAD/P/////8AAP8/////f/9//n////9//3/+f////3//f/5//3//fwAA/z//f/9/AAD/P/9//38AAP8/////f/9/AID///9//38AgP///3//fwCA////f/9/AID///9//38AgP///3//fwCAAAD/f/9/AIAAAP9//38AgAAA/3//fwCA/38AAP//////fwAA//////9/AAD/////AAD/f/9/AIAAAP9//38AgAAA/3//fwCA/38AAP//////fwAA//////9/AAD/////")
|
||||
}]
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_hg00i"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.75, -1, -0.1, 1.5, 2, 0.1),
|
||||
"attribute_data": PackedByteArray("AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAgD+JiIg9zcxMPe/ubj/NzEw9iYiIPTMzcz/v7m4/MzNzPw=="),
|
||||
"format": 34359742487,
|
||||
"index_count": 30,
|
||||
"index_data": PackedByteArray("AAABAAQABAABAAUAAQADAAUABQADAAcAAwACAAcABwACAAYAAgAAAAYABgAAAAQABAAFAAYABgAFAAcA"),
|
||||
"name": "Portal Material",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 8,
|
||||
"vertex_data": PackedByteArray("AABAvwAAgD8AAAAAAABAPwAAgD8AAAAAAABAvwAAgL8AAAAAAABAPwAAgL8AAAAAZmYmv2ZmZj/NzMy9ZmYmP2ZmZj/NzMy9ZmYmv2ZmZr/NzMy9ZmYmP2ZmZr/NzMy9/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==")
|
||||
}]
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_sjb6i"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.75, -1, -0.1, 1.5, 2, 0.1),
|
||||
"attribute_data": PackedByteArray("AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAgD+JiIg9zcxMPe/ubj/NzEw9iYiIPTMzcz/v7m4/MzNzPw=="),
|
||||
"format": 34359742487,
|
||||
"index_count": 30,
|
||||
"index_data": PackedByteArray("AAABAAQABAABAAUAAQADAAUABQADAAcAAwACAAcABwACAAYAAgAAAAYABgAAAAQABAAFAAYABgAFAAcA"),
|
||||
"name": "Portal Material",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 8,
|
||||
"vertex_data": PackedByteArray("AABAvwAAgD8AAAAAAABAPwAAgD8AAAAAAABAvwAAgL8AAAAAAABAPwAAgL8AAAAAZmYmv2ZmZj/NzMy9ZmYmP2ZmZj/NzMy9ZmYmv2ZmZr/NzMy9ZmYmP2ZmZr/NzMy9/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==")
|
||||
}]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_xuajm"]
|
||||
|
||||
[node name="level_test_portal_delay" type="Node3D"]
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_25cs0")
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0)
|
||||
shadow_enabled = true
|
||||
|
||||
[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.5, 0)
|
||||
shape = SubResource("ConvexPolygonShape3D_fdix6")
|
||||
|
||||
[node name="Ground" type="MeshInstance3D" parent="StaticBody3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
|
||||
material_override = ExtResource("1_kvwhs")
|
||||
mesh = SubResource("BoxMesh_hpe2j")
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="HUD" parent="." instance=ExtResource("2_hpe2j")]
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("3_mc50s")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.96416, 0, 3.38931)
|
||||
|
||||
[node name="PortalFrame" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.374685, 0)
|
||||
|
||||
[node name="CSGBakedCollisionShape3D" type="CollisionShape3D" parent="PortalFrame"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
||||
shape = SubResource("ConcavePolygonShape3D_hg00i")
|
||||
|
||||
[node name="CSGBakedMeshInstance3D" type="MeshInstance3D" parent="PortalFrame"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
||||
material_override = ExtResource("1_kvwhs")
|
||||
cast_shadow = 0
|
||||
mesh = SubResource("ArrayMesh_ka6qt")
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="Portal_A" type="MeshInstance3D" parent="PortalFrame" node_paths=PackedStringArray("exit_portal")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.37468, 0)
|
||||
cast_shadow = 0
|
||||
mesh = SubResource("ArrayMesh_hg00i")
|
||||
skeleton = NodePath("../..")
|
||||
script = ExtResource("4_hg00i")
|
||||
exit_portal = NodePath("../../PortalFrame2/Portal_B")
|
||||
|
||||
[node name="PortalFrame2" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 3, -0.375, -2.5)
|
||||
|
||||
[node name="CSGBakedCollisionShape3D" type="CollisionShape3D" parent="PortalFrame2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
||||
shape = SubResource("ConcavePolygonShape3D_hg00i")
|
||||
|
||||
[node name="CSGBakedMeshInstance3D" type="MeshInstance3D" parent="PortalFrame2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
||||
material_override = ExtResource("1_kvwhs")
|
||||
cast_shadow = 0
|
||||
mesh = SubResource("ArrayMesh_ka6qt")
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="Portal_B" type="MeshInstance3D" parent="PortalFrame2" node_paths=PackedStringArray("exit_portal")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.375, 0)
|
||||
cast_shadow = 0
|
||||
mesh = SubResource("ArrayMesh_sjb6i")
|
||||
skeleton = NodePath("../..")
|
||||
script = ExtResource("4_hg00i")
|
||||
exit_portal = NodePath("../../PortalFrame/Portal_A")
|
||||
|
||||
[node name="ProceduralMeshMaker" parent="." node_paths=PackedStringArray("portal") instance=ExtResource("5_ka6qt")]
|
||||
portal = NodePath("../PortalFrame2/Portal_B")
|
||||
width = 1.5
|
||||
|
||||
[node name="PortalEnvironmentAdapter" parent="." node_paths=PackedStringArray("base") instance=ExtResource("6_ka6qt")]
|
||||
base = NodePath("../WorldEnvironment")
|
||||
|
||||
[node name="Cube" parent="." instance=ExtResource("7_o2k5d")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0, -4)
|
||||
|
||||
[node name="Mesh" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, 3)
|
||||
material_override = ExtResource("8_25cs0")
|
||||
mesh = SubResource("SphereMesh_xuajm")
|
||||
skeleton = NodePath("")
|
520
levels/room_hermione_inside.tscn
Normal file
520
levels/room_hermione_inside.tscn
Normal file
@ -0,0 +1,520 @@
|
||||
[gd_scene load_steps=21 format=4 uid="uid://ci81nttn6foio"]
|
||||
|
||||
[ext_resource type="Material" uid="uid://b7kc8jfs4fowj" path="res://addons/kenney_prototype_tools/materials/green/material_02.tres" id="1_ofsgw"]
|
||||
[ext_resource type="PackedScene" uid="uid://dve8bvx87r1mm" path="res://models/kenney-house/wall-doorway-square.glb" id="2_4aydi"]
|
||||
[ext_resource type="PackedScene" uid="uid://bfgvxrgm0dkgi" path="res://models/kenney-house/wall.glb" id="3_37grx"]
|
||||
[ext_resource type="PackedScene" uid="uid://d3qx51q66eftg" path="res://models/kenney-house/roof-flat-corner.glb" id="4_e3d5x"]
|
||||
[ext_resource type="PackedScene" uid="uid://b0k0k4heruf3t" path="res://models/kenney-house/wall-window-square-detailed.glb" id="5_soise"]
|
||||
[ext_resource type="PackedScene" uid="uid://d347ojn6kwgn2" path="res://models/kenney-house/floor.glb" id="6_p5xd2"]
|
||||
[ext_resource type="PackedScene" uid="uid://yqsv32xecxbr" path="res://models/kenney-house/roof-flat-side.glb" id="7_km368"]
|
||||
[ext_resource type="PackedScene" uid="uid://d3yk6et3d4yw3" path="res://models/kenney-house/border.glb" id="8_rmadb"]
|
||||
[ext_resource type="PackedScene" uid="uid://dsogp3m6bedxp" path="res://models/kenney-house/column.glb" id="9_jpxld"]
|
||||
[ext_resource type="PackedScene" uid="uid://b4mndlgalycyh" path="res://models/kenney-house/roof-flat-center.glb" id="10_5h2gx"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_w2gbp"]
|
||||
size = Vector3(40, 1, 40)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_blkr4"]
|
||||
material = ExtResource("1_ofsgw")
|
||||
size = Vector3(40, 1, 40)
|
||||
|
||||
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_soise"]
|
||||
sky_top_color = Color(0.220994, 0.465185, 0.685758, 1)
|
||||
sky_horizon_color = Color(0.775585, 0.617199, 0.525157, 1)
|
||||
ground_bottom_color = Color(0.0327392, 0.0238974, 0.0155985, 1)
|
||||
ground_horizon_color = Color(0.67988, 0.550619, 0.418075, 1)
|
||||
|
||||
[sub_resource type="Sky" id="Sky_m1tf4"]
|
||||
sky_material = SubResource("ProceduralSkyMaterial_soise")
|
||||
|
||||
[sub_resource type="Environment" id="Environment_p5xd2"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_m1tf4")
|
||||
tonemap_mode = 1
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_soise"]
|
||||
albedo_color = Color(1, 0.6, 0.235294, 1)
|
||||
|
||||
[sub_resource type="PrismMesh" id="PrismMesh_p5xd2"]
|
||||
material = SubResource("StandardMaterial3D_soise")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_p5xd2"]
|
||||
shading_mode = 0
|
||||
albedo_color = Color(0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_km368"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.51069, -0.511952, -0.512309, 1.02138, 1.02626, 1.02462),
|
||||
"attribute_data": PackedByteArray("q6oqPgAAAABWVVU/AAAAAKuqKj4AAAAAVlVVPwAAAAAAAAAAAAAAP6uqKj8AAAA/q6qqPgAAAD8AAIA/AAAAP6uqqj4AAAAAAAAAAAAAAD+rqio/AAAAAKuqqj4AAAA/q6qqPgAAAD8AAAAAAACAP6uqKj8AAAA/q6qqPgAAgD+rqio/AAAAPwAAgD8AAAA/q6oqPwAAgD8AAIA/AACAPw=="),
|
||||
"format": 34359742487,
|
||||
"index_count": 24,
|
||||
"index_data": PackedByteArray("AgAEAAYAAwAFAAcACAAMAAoACgAMAA4ACQANAAsACwANAA8AEAASABEAEQASABMA"),
|
||||
"material": SubResource("StandardMaterial3D_p5xd2"),
|
||||
"name": "Outline",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 20,
|
||||
"vertex_data": PackedByteArray("VHXYu/ypAz+xJgM/U3XYu/ypAz+xJgO/VHXYu/ypAz+xJgM/U3XYu/ypAz+xJgO/nLwCv04PA79ODwM/nLwCP04PA79ODwO/nLwCP04PA79ODwM/nLwCv04PA79ODwO/VHXYu/ypAz+xJgM/U3XYu/ypAz+xJgO/U3XYu/ypAz+xJgO/VHXYu/ypAz+xJgM/nLwCP04PA79ODwM/nLwCv04PA79ODwO/nLwCP04PA79ODwO/nLwCv04PA79ODwM/nLwCv04PA79ODwM/nLwCP04PA79ODwM/nLwCv04PA79ODwO/nLwCP04PA79ODwO//3//f////7//////AAD/v/9//3////+//////wAA/7//f/9/////v/////8AAP+//3//f////7//////AAD/v1TVqqr/////qiqqqv9//79U1aqq/////6oqqqr/f/+/VNWqqv////+qKqqq/3//v1TVqqr/////qiqqqv9//78AgAAA////vwCAAAD///+/AIAAAP///78AgAAA////vw==")
|
||||
}]
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_soise"]
|
||||
data = PackedVector3Array(0, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0, 0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0, 0.5, 0.5, 0, 0.5, -0.5, 0.5, -0.5, 0.5, 0, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0, 0.5, -0.5, 0, 0.5, 0.5, -0.5, -0.5, -0.5, 0, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5)
|
||||
|
||||
[node name="room_hermione_inside" type="Node3D"]
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
||||
shape = SubResource("BoxShape3D_w2gbp")
|
||||
|
||||
[node name="Ground" type="MeshInstance3D" parent="StaticBody3D"]
|
||||
mesh = SubResource("BoxMesh_blkr4")
|
||||
skeleton = NodePath("../..")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="House" type="Node3D" parent="."]
|
||||
|
||||
[node name="wall-doorway-square2" parent="House" instance=ExtResource("2_4aydi")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.5, 0.5)
|
||||
|
||||
[node name="wall-window-square-detailed2" parent="House" instance=ExtResource("5_soise")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.5, 2.5)
|
||||
|
||||
[node name="floor2" parent="House" instance=ExtResource("6_p5xd2")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.5, 0.5)
|
||||
|
||||
[node name="floor3" parent="House" instance=ExtResource("6_p5xd2")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.5, 2.5)
|
||||
|
||||
[node name="floor4" parent="House" instance=ExtResource("6_p5xd2")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0.5, 0.5)
|
||||
|
||||
[node name="floor5" parent="House" instance=ExtResource("6_p5xd2")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0.5, 2.5)
|
||||
|
||||
[node name="floor7" parent="House" instance=ExtResource("6_p5xd2")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.245437, 0.5, 0.5)
|
||||
|
||||
[node name="floor8" parent="House" instance=ExtResource("6_p5xd2")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.245437, 0.5, 2.5)
|
||||
|
||||
[node name="floor6" parent="House" instance=ExtResource("6_p5xd2")]
|
||||
transform = Transform3D(6, 0, 0, 0, 1, 0, 0, 0, 6, -6.5, 0.5, 1.5)
|
||||
|
||||
[node name="wall2" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 2.5, 0.5, 3.5)
|
||||
|
||||
[node name="wall3" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0.5, 0.5, 3.5)
|
||||
|
||||
[node name="wall20" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 2.5, 0.5, -0.5)
|
||||
|
||||
[node name="wall21" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0.5, 0.5, -0.5)
|
||||
|
||||
[node name="wall4" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, 4.5)
|
||||
|
||||
[node name="wall5" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, 6.5)
|
||||
|
||||
[node name="wall22" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.5, 4.5)
|
||||
|
||||
[node name="wall23" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.5, 6.5)
|
||||
|
||||
[node name="wall24" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.5, 0.5)
|
||||
|
||||
[node name="wall25" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.5, 2.5)
|
||||
|
||||
[node name="wall26" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.5, -3.5)
|
||||
|
||||
[node name="wall27" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.5, -1.5)
|
||||
|
||||
[node name="wall18" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, -3.5)
|
||||
|
||||
[node name="wall19" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, -1.5)
|
||||
|
||||
[node name="wall6" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -1.5, 0.5, 7.5)
|
||||
|
||||
[node name="wall7" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -3.5, 0.5, 7.5)
|
||||
|
||||
[node name="wall8" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -5.5, 0.5, 7.5)
|
||||
|
||||
[node name="wall9" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -7.5, 0.5, 7.5)
|
||||
|
||||
[node name="wall10" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -9.5, 0.5, 7.5)
|
||||
|
||||
[node name="wall11" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -11.5, 0.5, 7.5)
|
||||
|
||||
[node name="wall12" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -1.5, 0.5, -4.5)
|
||||
|
||||
[node name="wall13" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -3.5, 0.5, -4.5)
|
||||
|
||||
[node name="wall14" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -5.5, 0.5, -4.5)
|
||||
|
||||
[node name="wall15" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -7.5, 0.5, -4.5)
|
||||
|
||||
[node name="wall16" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -9.5, 0.5, -4.5)
|
||||
|
||||
[node name="wall17" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -11.5, 0.5, -4.5)
|
||||
|
||||
[node name="wall32" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.9, 4.5)
|
||||
|
||||
[node name="wall33" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.9, 6.5)
|
||||
|
||||
[node name="wall54" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.9, 0.5)
|
||||
|
||||
[node name="wall55" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.9, 2.5)
|
||||
|
||||
[node name="wall34" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 2.9, 4.5)
|
||||
|
||||
[node name="wall35" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 2.9, 6.5)
|
||||
|
||||
[node name="wall36" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 2.9, 0.5)
|
||||
|
||||
[node name="wall37" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 2.9, 2.5)
|
||||
|
||||
[node name="wall38" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 2.9, -3.5)
|
||||
|
||||
[node name="wall39" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 2.9, -1.5)
|
||||
|
||||
[node name="wall40" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.9, -3.5)
|
||||
|
||||
[node name="wall41" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.9, -1.5)
|
||||
|
||||
[node name="wall42" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -1.5, 2.9, 7.5)
|
||||
|
||||
[node name="wall43" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -3.5, 2.9, 7.5)
|
||||
|
||||
[node name="wall44" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -5.5, 2.9, 7.5)
|
||||
|
||||
[node name="wall45" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -7.5, 2.9, 7.5)
|
||||
|
||||
[node name="wall46" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -9.5, 2.9, 7.5)
|
||||
|
||||
[node name="wall47" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -11.5, 2.9, 7.5)
|
||||
|
||||
[node name="wall48" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -1.5, 2.9, -4.5)
|
||||
|
||||
[node name="wall49" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -3.5, 2.9, -4.5)
|
||||
|
||||
[node name="wall50" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -5.5, 2.9, -4.5)
|
||||
|
||||
[node name="wall51" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -7.5, 2.9, -4.5)
|
||||
|
||||
[node name="wall52" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -9.5, 2.9, -4.5)
|
||||
|
||||
[node name="wall53" parent="House" instance=ExtResource("3_37grx")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -11.5, 2.9, -4.5)
|
||||
|
||||
[node name="roof-flat-corner2" parent="House" instance=ExtResource("4_e3d5x")]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 2.5, 2.9, 0.5)
|
||||
|
||||
[node name="roof-flat-corner3" parent="House" instance=ExtResource("4_e3d5x")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 2.9, 2.5)
|
||||
|
||||
[node name="roof-flat-side2" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0.5, 2.9, 0.5)
|
||||
|
||||
[node name="roof-flat-side3" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 0.5, 2.9, 2.5)
|
||||
|
||||
[node name="border2" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 3, 1)
|
||||
|
||||
[node name="border3" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 3, 2.5)
|
||||
|
||||
[node name="border4" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 3, -2.5)
|
||||
|
||||
[node name="border9" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 3, -3.5)
|
||||
|
||||
[node name="border5" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 3, -1)
|
||||
|
||||
[node name="border6" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 3, 4)
|
||||
|
||||
[node name="border7" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 3, 5.5)
|
||||
|
||||
[node name="border8" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 3, 6.5)
|
||||
|
||||
[node name="border10" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -7.0625, 3, 7.5625)
|
||||
|
||||
[node name="border11" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -5.5625, 3, 7.5625)
|
||||
|
||||
[node name="border12" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -10.5625, 3, 7.5625)
|
||||
|
||||
[node name="border13" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -11.5625, 3, 7.5625)
|
||||
|
||||
[node name="border14" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -9.0625, 3, 7.5625)
|
||||
|
||||
[node name="border15" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -4.0625, 3, 7.5625)
|
||||
|
||||
[node name="border16" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -2.5625, 3, 7.5625)
|
||||
|
||||
[node name="border17" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -1.5625, 3, 7.5625)
|
||||
|
||||
[node name="border18" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -12.5, 3, 1)
|
||||
|
||||
[node name="border19" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -12.5, 3, 2.5)
|
||||
|
||||
[node name="border20" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -12.5, 3, -2.5)
|
||||
|
||||
[node name="border21" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -12.5, 3, -3.5)
|
||||
|
||||
[node name="border22" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -12.5, 3, -1)
|
||||
|
||||
[node name="border23" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -12.5, 3, 4)
|
||||
|
||||
[node name="border24" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -12.5, 3, 5.5)
|
||||
|
||||
[node name="border25" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -12.5, 3, 6.5)
|
||||
|
||||
[node name="border26" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-2.18557e-07, 0, -1, 0, 1, 0, 1, 0, -2.18557e-07, -5.9375, 3, -4.4375)
|
||||
|
||||
[node name="border27" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-2.18557e-07, 0, -1, 0, 1, 0, 1, 0, -2.18557e-07, -7.4375, 3, -4.4375)
|
||||
|
||||
[node name="border28" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-2.18557e-07, 0, -1, 0, 1, 0, 1, 0, -2.18557e-07, -2.4375, 3, -4.4375)
|
||||
|
||||
[node name="border29" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-2.18557e-07, 0, -1, 0, 1, 0, 1, 0, -2.18557e-07, -1.4375, 3, -4.4375)
|
||||
|
||||
[node name="border30" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-2.18557e-07, 0, -1, 0, 1, 0, 1, 0, -2.18557e-07, -3.9375, 3, -4.4375)
|
||||
|
||||
[node name="border31" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-2.18557e-07, 0, -1, 0, 1, 0, 1, 0, -2.18557e-07, -8.9375, 3, -4.4375)
|
||||
|
||||
[node name="border32" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-2.18557e-07, 0, -1, 0, 1, 0, 1, 0, -2.18557e-07, -10.4375, 3, -4.4375)
|
||||
|
||||
[node name="border33" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-2.18557e-07, 0, -1, 0, 1, 0, 1, 0, -2.18557e-07, -11.4375, 3, -4.4375)
|
||||
|
||||
[node name="border34" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-1, 0, 2.62268e-07, 0, 1, 0, -2.62268e-07, 0, -1, -0.5, 3, 2.125)
|
||||
|
||||
[node name="border35" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-1, 0, 2.62268e-07, 0, 1, 0, -2.62268e-07, 0, -1, -0.5, 3, 0.625)
|
||||
|
||||
[node name="border36" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-1, 0, 2.62268e-07, 0, 1, 0, -2.62268e-07, 0, -1, -0.500001, 3, 5.625)
|
||||
|
||||
[node name="border37" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-1, 0, 2.62268e-07, 0, 1, 0, -2.62268e-07, 0, -1, -0.500001, 3, 6.625)
|
||||
|
||||
[node name="border38" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-1, 0, 2.62268e-07, 0, 1, 0, -2.62268e-07, 0, -1, -0.5, 3, 4.125)
|
||||
|
||||
[node name="border39" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-1, 0, 2.62268e-07, 0, 1, 0, -2.62268e-07, 0, -1, -0.5, 3, -0.875)
|
||||
|
||||
[node name="border40" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-1, 0, 2.62268e-07, 0, 1, 0, -2.62268e-07, 0, -1, -0.499999, 3, -2.375)
|
||||
|
||||
[node name="border41" parent="House" instance=ExtResource("8_rmadb")]
|
||||
transform = Transform3D(-1, 0, 2.62268e-07, 0, 1, 0, -2.62268e-07, 0, -1, -0.499999, 3, -3.375)
|
||||
|
||||
[node name="column2" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, -4.5)
|
||||
|
||||
[node name="column3" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.9, -4.5)
|
||||
|
||||
[node name="column4" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 2.9, 7.5)
|
||||
|
||||
[node name="column5" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, 7.5)
|
||||
|
||||
[node name="column6" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 2.9, 7.5)
|
||||
|
||||
[node name="column7" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.5, 7.5)
|
||||
|
||||
[node name="column8" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 2.9, -4.5)
|
||||
|
||||
[node name="column9" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.5, -4.5)
|
||||
|
||||
[node name="column10" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.5, 2.9, -4.5)
|
||||
|
||||
[node name="column11" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.5, 0.5, -4.5)
|
||||
|
||||
[node name="column12" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.5, 2.9, 7.5)
|
||||
|
||||
[node name="column13" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6.5, 0.5, 7.5)
|
||||
|
||||
[node name="column14" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 2.9, 1.5)
|
||||
|
||||
[node name="column15" parent="House" instance=ExtResource("9_jpxld")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 0.5, 1.5)
|
||||
|
||||
[node name="roof-flat-corner4" parent="House" instance=ExtResource("4_e3d5x")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1, 5.3, 7)
|
||||
|
||||
[node name="roof-flat-corner5" parent="House" instance=ExtResource("4_e3d5x")]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -1, 5.3, -4)
|
||||
|
||||
[node name="roof-flat-corner6" parent="House" instance=ExtResource("4_e3d5x")]
|
||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -12, 5.3, -4)
|
||||
|
||||
[node name="roof-flat-corner7" parent="House" instance=ExtResource("4_e3d5x")]
|
||||
transform = Transform3D(1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, -12, 5.3, 7)
|
||||
|
||||
[node name="roof-flat-side4" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -10.5, 5.3, 7)
|
||||
|
||||
[node name="roof-flat-side5" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -8.5, 5.3, 7)
|
||||
|
||||
[node name="roof-flat-side6" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -6.5, 5.3, 7)
|
||||
|
||||
[node name="roof-flat-side7" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -4.5, 5.3, 7)
|
||||
|
||||
[node name="roof-flat-side8" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -2.5, 5.3, 7)
|
||||
|
||||
[node name="roof-flat-side9" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -12, 5.3, -3)
|
||||
|
||||
[node name="roof-flat-side10" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -12, 5.3, -1)
|
||||
|
||||
[node name="roof-flat-side11" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -12, 5.3, 1)
|
||||
|
||||
[node name="roof-flat-side12" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -12, 5.3, 3)
|
||||
|
||||
[node name="roof-flat-side13" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, -12, 5.3, 5)
|
||||
|
||||
[node name="roof-flat-side14" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -2.5, 5.3, -4)
|
||||
|
||||
[node name="roof-flat-side15" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -4.5, 5.3, -4)
|
||||
|
||||
[node name="roof-flat-side16" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -6.5, 5.3, -4)
|
||||
|
||||
[node name="roof-flat-side17" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -8.5, 5.3, -4)
|
||||
|
||||
[node name="roof-flat-side18" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(1.31134e-07, 0, 1, 0, 1, 0, -1, 0, 1.31134e-07, -10.5, 5.3, -4)
|
||||
|
||||
[node name="roof-flat-side19" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -1, 5.3, 5)
|
||||
|
||||
[node name="roof-flat-side20" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -1, 5.3, 3)
|
||||
|
||||
[node name="roof-flat-side21" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -1, 5.3, 1)
|
||||
|
||||
[node name="roof-flat-side22" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -1, 5.3, -1)
|
||||
|
||||
[node name="roof-flat-side23" parent="House" instance=ExtResource("7_km368")]
|
||||
transform = Transform3D(1, 0, -1.74846e-07, 0, 1, 0, 1.74846e-07, 0, 1, -1, 5.3, -3)
|
||||
|
||||
[node name="roof-flat-center2" parent="House" instance=ExtResource("10_5h2gx")]
|
||||
transform = Transform3D(5, 0, 0, 0, 1, 0, 0, 0, 5, -6.5, 5.3, 1.5)
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_p5xd2")
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(0.69407, -0.512887, 0.505188, 0.0341743, 0.724421, 0.68851, -0.719096, -0.46061, 0.520327, 6.21356, 1.32592, -0.575947)
|
||||
shadow_enabled = true
|
||||
|
||||
[node name="Prism" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(0.679275, 0, 0.733884, 0, 1, 0, -0.733884, 0, 0.679275, 6.21356, 1.32592, -0.575947)
|
||||
mesh = SubResource("PrismMesh_p5xd2")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Prism"]
|
||||
mesh = SubResource("ArrayMesh_km368")
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Prism"]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Prism/StaticBody3D"]
|
||||
shape = SubResource("ConcavePolygonShape3D_soise")
|
124
levels/room_hermione_outside.tscn
Normal file
124
levels/room_hermione_outside.tscn
Normal file
@ -0,0 +1,124 @@
|
||||
[gd_scene load_steps=15 format=4 uid="uid://drhaqr78kv1o2"]
|
||||
|
||||
[ext_resource type="Material" uid="uid://b7kc8jfs4fowj" path="res://addons/kenney_prototype_tools/materials/green/material_02.tres" id="1_2frux"]
|
||||
[ext_resource type="PackedScene" uid="uid://dve8bvx87r1mm" path="res://models/kenney-house/wall-doorway-square.glb" id="2_hytsl"]
|
||||
[ext_resource type="PackedScene" uid="uid://bfgvxrgm0dkgi" path="res://models/kenney-house/wall.glb" id="3_m1tf4"]
|
||||
[ext_resource type="PackedScene" uid="uid://d3qx51q66eftg" path="res://models/kenney-house/roof-flat-corner.glb" id="4_iniy3"]
|
||||
[ext_resource type="PackedScene" uid="uid://b0k0k4heruf3t" path="res://models/kenney-house/wall-window-square-detailed.glb" id="5_tbp4y"]
|
||||
[ext_resource type="PackedScene" uid="uid://d347ojn6kwgn2" path="res://models/kenney-house/floor.glb" id="6_hytsl"]
|
||||
[ext_resource type="PackedScene" uid="uid://birikia38m0g7" path="res://skybox_world_environment.tscn" id="7_m1tf4"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_blkr4"]
|
||||
material = ExtResource("1_2frux")
|
||||
size = Vector3(20, 1, 20)
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_2frux"]
|
||||
data = PackedVector3Array(-10, 0.5, 10, 10, 0.5, 10, -10, -0.5, 10, 10, 0.5, 10, 10, -0.5, 10, -10, -0.5, 10, 10, 0.5, -10, -10, 0.5, -10, 10, -0.5, -10, -10, 0.5, -10, -10, -0.5, -10, 10, -0.5, -10, 10, 0.5, 10, 10, 0.5, -10, 10, -0.5, 10, 10, 0.5, -10, 10, -0.5, -10, 10, -0.5, 10, -10, 0.5, -10, -10, 0.5, 10, -10, -0.5, -10, -10, 0.5, 10, -10, -0.5, 10, -10, -0.5, -10, 10, 0.5, 10, -10, 0.5, 10, 10, 0.5, -10, -10, 0.5, 10, -10, 0.5, -10, 10, 0.5, -10, -10, -0.5, 10, 10, -0.5, 10, -10, -0.5, -10, 10, -0.5, 10, 10, -0.5, -10, -10, -0.5, -10)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_m1tf4"]
|
||||
albedo_color = Color(0.733333, 0.552941, 1, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_iniy3"]
|
||||
material = SubResource("StandardMaterial3D_m1tf4")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_tbp4y"]
|
||||
shading_mode = 0
|
||||
albedo_color = Color(0, 0, 0, 1)
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_b8r5k"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.511547, -0.511547, -0.511547, 1.02309, 1.02309, 1.02309),
|
||||
"attribute_data": PackedByteArray("AAAAAAAAAACrqio/AAAAAKuqqj4AAAAAAACAPwAAAAAAAAAAAAAAP6uqKj8AAAA/q6qqPgAAAD8AAIA/AAAAP6uqqj4AAAAAAAAAAAAAAD+rqio/AAAAAKuqqj4AAAA/q6qqPgAAAD8AAAAAAACAP6uqKj8AAAA/q6qqPgAAgD+rqqo+AAAAP6uqKj8AAAA/q6oqPwAAAD8AAIA/AAAAP6uqqj4AAIA/q6oqPwAAgD+rqio/AACAPwAAgD8AAIA/"),
|
||||
"format": 34359742487,
|
||||
"index_count": 36,
|
||||
"index_data": PackedByteArray("AAAEAAIAAgAEAAYAAQAFAAMAAwAFAAcACAAMAAoACgAMAA4ACQANAAsACwANAA8AEAAUABIAEgAUABYAEQAVABMAEwAVABcA"),
|
||||
"material": SubResource("StandardMaterial3D_tbp4y"),
|
||||
"name": "Outline",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 24,
|
||||
"vertex_data": PackedByteArray("v/QCv7/0Aj+/9AI/v/QCP7/0Aj+/9AK/v/QCP7/0Aj+/9AI/v/QCv7/0Aj+/9AK/v/QCv7/0Ar+/9AI/v/QCP7/0Ar+/9AK/v/QCP7/0Ar+/9AI/v/QCv7/0Ar+/9AK/v/QCP7/0Aj+/9AI/v/QCv7/0Aj+/9AK/v/QCP7/0Aj+/9AK/v/QCv7/0Aj+/9AI/v/QCP7/0Ar+/9AI/v/QCv7/0Ar+/9AK/v/QCP7/0Ar+/9AK/v/QCv7/0Ar+/9AI/v/QCP7/0Aj+/9AI/v/QCv7/0Ar+/9AI/v/QCv7/0Aj+/9AI/v/QCP7/0Ar+/9AI/v/QCP7/0Aj+/9AK/v/QCv7/0Ar+/9AK/v/QCv7/0Aj+/9AK/v/QCP7/0Ar+/9AK//3//f////7//////AAD/v/9//3////+//////wAA/7//f/9/////v/////8AAP+//3//f////7//////AAD/v///AID/////AAAAgP9//7///wCA/////wAAAID/f/+///8AgP////8AAACA/3//v///AID/////AAAAgP9//78AgP//AAD/vwCAAAD///+/AID//wAA/78AgAAA////vwCA//8AAP+/AIAAAP///78AgP//AAD/vwCAAAD///+/")
|
||||
}]
|
||||
|
||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_m1tf4"]
|
||||
data = PackedVector3Array(-0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, 0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, -0.5, 0.5, -0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, -0.5, -0.5, -0.5, 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, -0.5, -0.5, -0.5)
|
||||
|
||||
[node name="room_hermione_outside" type="Node3D"]
|
||||
|
||||
[node name="Ground" type="MeshInstance3D" parent="."]
|
||||
mesh = SubResource("BoxMesh_blkr4")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Ground"]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ground/StaticBody3D"]
|
||||
shape = SubResource("ConcavePolygonShape3D_2frux")
|
||||
|
||||
[node name="House" type="Node3D" parent="."]
|
||||
|
||||
[node name="wall-doorway-square2" parent="House" instance=ExtResource("2_hytsl")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.5, 0.5)
|
||||
|
||||
[node name="wall3" parent="House" instance=ExtResource("3_m1tf4")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, 2.5)
|
||||
|
||||
[node name="wall7" parent="House" instance=ExtResource("3_m1tf4")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.5, 0.5)
|
||||
|
||||
[node name="wall4" parent="House" instance=ExtResource("3_m1tf4")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 2.5, 0.5, 3.5)
|
||||
|
||||
[node name="wall8" parent="House" instance=ExtResource("3_m1tf4")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0.5, 0.5, 3.5)
|
||||
|
||||
[node name="wall5" parent="House" instance=ExtResource("3_m1tf4")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 2.5, 0.5, -0.5)
|
||||
|
||||
[node name="wall6" parent="House" instance=ExtResource("3_m1tf4")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0.5, 0.5, -0.5)
|
||||
|
||||
[node name="roof-flat-corner2" parent="House" instance=ExtResource("4_iniy3")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 2.88135, 2.5)
|
||||
|
||||
[node name="roof-flat-corner3" parent="House" instance=ExtResource("4_iniy3")]
|
||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 2.5, 2.88135, 0.5)
|
||||
|
||||
[node name="roof-flat-corner4" parent="House" instance=ExtResource("4_iniy3")]
|
||||
transform = Transform3D(-1, 0, 8.74228e-08, 0, 1, 0, -8.74228e-08, 0, -1, 0.5, 2.88135, 0.5)
|
||||
|
||||
[node name="roof-flat-corner5" parent="House" instance=ExtResource("4_iniy3")]
|
||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0.5, 2.88135, 2.5)
|
||||
|
||||
[node name="wall-window-square-detailed2" parent="House" instance=ExtResource("5_tbp4y")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.5, 2.5)
|
||||
|
||||
[node name="floor2" parent="." instance=ExtResource("6_hytsl")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.5, 0.5)
|
||||
|
||||
[node name="floor3" parent="." instance=ExtResource("6_hytsl")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.5, 0.5, 2.5)
|
||||
|
||||
[node name="floor4" parent="." instance=ExtResource("6_hytsl")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0.5, 0.5)
|
||||
|
||||
[node name="floor5" parent="." instance=ExtResource("6_hytsl")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0.5, 2.5)
|
||||
|
||||
[node name="WorldEnvironment2" parent="." instance=ExtResource("7_m1tf4")]
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(0.999197, -0.0103569, -0.0386982, 0.0341743, 0.724421, 0.68851, 0.0209029, -0.68928, 0.724194, 0, 0, 0)
|
||||
shadow_enabled = true
|
||||
|
||||
[node name="Cube" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(0.823869, 0, 0.56678, 0, 1, 0, -0.56678, 0, 0.823869, 6.09669, 1.73711, 3.18691)
|
||||
mesh = SubResource("BoxMesh_iniy3")
|
||||
metadata/_edit_group_ = true
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Cube"]
|
||||
mesh = SubResource("ArrayMesh_b8r5k")
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="Cube"]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Cube/StaticBody3D"]
|
||||
shape = SubResource("ConcavePolygonShape3D_m1tf4")
|
48
levels/test_internal_nodes.gd
Normal file
48
levels/test_internal_nodes.gd
Normal file
@ -0,0 +1,48 @@
|
||||
@tool
|
||||
extends Node3D
|
||||
|
||||
|
||||
|
||||
func _add_inspector_buttons() -> Array:
|
||||
var buttons: Array = []
|
||||
|
||||
buttons.push_back({
|
||||
"name": "Regular cube mesh",
|
||||
"pressed": _add_regular_cube_mesh
|
||||
})
|
||||
buttons.push_back({
|
||||
"name": "Internal cube mesh",
|
||||
"pressed": _add_internal_cube_mesh
|
||||
})
|
||||
buttons.push_back({
|
||||
"name": "Delete all children",
|
||||
"pressed": func(): for child in get_children(true): child.queue_free()
|
||||
})
|
||||
|
||||
return buttons
|
||||
|
||||
func _add_regular_cube_mesh() -> void:
|
||||
var m = MeshInstance3D.new()
|
||||
var b = BoxMesh.new()
|
||||
m.mesh = b
|
||||
add_child(m, true)
|
||||
m.owner = self
|
||||
m.position.x = 1.5 * get_child_count(true)
|
||||
|
||||
func _add_internal_cube_mesh() -> void:
|
||||
var m = MeshInstance3D.new()
|
||||
var b = BoxMesh.new()
|
||||
m.mesh = b
|
||||
add_child(m, true, Node.INTERNAL_MODE_BACK)
|
||||
|
||||
var mat = StandardMaterial3D.new()
|
||||
mat.albedo_color = Color("ff4c4e")
|
||||
b.material = mat
|
||||
|
||||
# Lock the node in editor. Prevents selection (here for internal nodes)
|
||||
# UNDOCUMENTED
|
||||
# https://github.com/godotengine/godot-proposals/issues/3046
|
||||
m.set_meta("_edit_lock_", true)
|
||||
|
||||
m.owner = self
|
||||
m.position.x = 1.5 * get_child_count(true)
|
1
levels/test_internal_nodes.gd.uid
Normal file
1
levels/test_internal_nodes.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://ouk76qr5gpq0
|
40
levels/test_internal_nodes.tscn
Normal file
40
levels/test_internal_nodes.tscn
Normal file
@ -0,0 +1,40 @@
|
||||
[gd_scene load_steps=8 format=3 uid="uid://bnrph4k6wpruy"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://ouk76qr5gpq0" path="res://levels/test_internal_nodes.gd" id="1_glqbe"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_glqbe"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_dodl2"]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_wgeau"]
|
||||
albedo_color = Color(1, 0.298039, 0.305882, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_j0q2q"]
|
||||
material = SubResource("StandardMaterial3D_wgeau")
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_47wcs"]
|
||||
albedo_color = Color(1, 0.298039, 0.305882, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_bkhqo"]
|
||||
material = SubResource("StandardMaterial3D_47wcs")
|
||||
|
||||
[node name="test_internal_nodes" type="Node3D"]
|
||||
script = ExtResource("1_glqbe")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 0, 0)
|
||||
mesh = SubResource("BoxMesh_glqbe")
|
||||
|
||||
[node name="MeshInstance3D4" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0)
|
||||
mesh = SubResource("BoxMesh_dodl2")
|
||||
|
||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 0)
|
||||
mesh = SubResource("BoxMesh_j0q2q")
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 0, 0)
|
||||
mesh = SubResource("BoxMesh_bkhqo")
|
||||
metadata/_edit_lock_ = true
|
77
levels/test_procedural_portal.tscn
Normal file
77
levels/test_procedural_portal.tscn
Normal file
@ -0,0 +1,77 @@
|
||||
[gd_scene load_steps=8 format=4 uid="uid://c0ieh1abu1xne"]
|
||||
|
||||
[ext_resource type="Material" uid="uid://bv36triwinl2f" path="res://textures/uv-checker-material.tres" id="1_dn1le"]
|
||||
[ext_resource type="Script" uid="uid://d2bvvjsibau8c" path="res://addons/simple-portal-system/scripts/portal.gd" id="1_ksg6r"]
|
||||
[ext_resource type="PackedScene" uid="uid://d1dtxvwk86ple" path="res://procedural_mesh_maker.tscn" id="2_4vena"]
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_1w8eh"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-1, -1.3, -0.133, 2, 2.6, 0.133),
|
||||
"attribute_data": PackedByteArray("AAAAAAAAAAAAAIA/AAAAAAAAAAAAAIA/AACAPwAAgD8nMYg9soZRPdv5bj+yhlE9JzGIPZXncj/b+W4/ledyPw=="),
|
||||
"format": 34359742487,
|
||||
"index_count": 30,
|
||||
"index_data": PackedByteArray("AAABAAQABAABAAUAAQADAAUABQADAAcAAwACAAcABwACAAYAAgAAAAYABgAAAAQABAAFAAYABgAFAAcA"),
|
||||
"material": ExtResource("1_dn1le"),
|
||||
"name": "Portal Material",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 8,
|
||||
"vertex_data": PackedByteArray("AACAv2Zmpj8AAAAAAACAP2Zmpj8AAAAAAACAv2Zmpr8AAAAAAACAP2Zmpr8AAAAAtvNdv0FglT8nMQi+tvNdP0FglT8nMQi+tvNdv0Fglb8nMQi+tvNdP0Fglb8nMQi+/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==")
|
||||
}]
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_82kw5"]
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_dn1le"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-1.02429, -1.3, -0.2, 2.04857, 2.60001, 0.20001),
|
||||
"format": 34896613377,
|
||||
"index_count": 30,
|
||||
"index_data": PackedByteArray("BwAFAAQABwAEAAYAAQAHAAMAAQAFAAcAAgAEAAAAAgAGAAQAAwAGAAIAAwAHAAYAAAAFAAEAAAAEAAUA"),
|
||||
"lods": [0.156674, PackedByteArray("AwAFAAAAAQAFAAMAAwAAAAIAAAAFAAEA")],
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 8,
|
||||
"vertex_data": PackedByteArray("AAD+//v/AAAAAAAA+/8AAP///v/7/wAA/v8AAPv/AACZGWXmAAAAAJkZmRkAAAAAZeZl5gAAAABl5pkZAAAAAA==")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_u54xs"]
|
||||
resource_name = "room_Plane_001"
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-1.02429, -1.3, -0.2, 2.04857, 2.60001, 0.20001),
|
||||
"attribute_data": PackedByteArray("AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//"),
|
||||
"format": 34896613399,
|
||||
"index_count": 30,
|
||||
"index_data": PackedByteArray("EQALAAgAEQAIAA4AAgASAAYAAgAMABIABAAJAAAABAAPAAkABwAQAAUABwATABAAAQANAAMAAQAKAA0A"),
|
||||
"lods": [0.156674, PackedByteArray("BgAWAAAAAgAWAAYABgAAAAQAFAAXABUA")],
|
||||
"material": SubResource("StandardMaterial3D_82kw5"),
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 24,
|
||||
"vertex_data": PackedByteArray("AAD+//v/SGUAAP7/+/8AagAAAAD7/0hlAAAAAPv/AGr///7/+/9IZf///v/7/wBq/v8AAPv/SGX+/wAA+/8AapkZZeYAAP5/mRll5gAASGWZGWXmAAAAapkZmRkAAP5/mRmZGQAASGWZGZkZAAAAamXmZeYAAP5/ZeZl5gAASGVl5mXmAAAAamXmmRkAAP5/ZeaZGQAASGVl5pkZAAAAagAA/v/7/wBqAAAAAPv/AGqZGZkZAAD1b5kZmRkAAABqAAD/f/9/AAD///9//38AAAAA/3//f///////f/9/////f///AAD/f/9/AAD/f///////f/9/AAD/f///AAD/f/9/////f///////f/9/////fwAA/38AAP///3//fwAA")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_dn1le")
|
||||
|
||||
[node name="ProceduralPortal" type="Node3D"]
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.4625e-05, -0.0007523, 0.000824571)
|
||||
mesh = SubResource("ArrayMesh_1w8eh")
|
||||
script = ExtResource("1_ksg6r")
|
||||
|
||||
[node name="ProceduralMeshMaker" parent="." node_paths=PackedStringArray("portal") instance=ExtResource("2_4vena")]
|
||||
height = 2.6
|
||||
width = 2.0
|
||||
indent = 0.133
|
||||
portal = NodePath("../MeshInstance3D")
|
||||
portal_material = ExtResource("1_dn1le")
|
||||
|
||||
[node name="OmniLight3D" type="OmniLight3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.52963, 0, 1.51112)
|
||||
metadata/_edit_lock_ = true
|
||||
|
||||
[node name="OfficialPortal" type="MeshInstance3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.5, 0, 0)
|
||||
mesh = SubResource("ArrayMesh_u54xs")
|
||||
metadata/_edit_lock_ = true
|
32
menu.gd
32
menu.gd
@ -1,14 +1,28 @@
|
||||
extends Control
|
||||
|
||||
const LEVEL_5_ROOMS = preload("res://level_5rooms.tscn")
|
||||
const LEVEL_PLATFORMER = preload("res://level_platformer.tscn")
|
||||
const LEVEL_3_ROOMS = preload("res://level_3_rooms.tscn")
|
||||
const LEVEL_5_ROOMS: PackedScene = preload("res://levels/level_5rooms.tscn")
|
||||
const LEVEL_3_ROOMS: PackedScene = preload("res://levels/level_3_rooms.tscn")
|
||||
const LEVEL_PLATFORMER: PackedScene = preload("res://levels/level_platformer.tscn")
|
||||
const LEVEL_SEMAPHORE_LIGHTS: PackedScene = preload("res://levels/level_semaphore_lights.tscn")
|
||||
const LEVEL_CUBE_PORTALS: PackedScene = preload("res://levels/level_cube_portals.tscn")
|
||||
const LEVEL_HERMIONE: PackedScene = preload("res://levels/level_hermione.tscn")
|
||||
const LEVEL_TEST_PORTAL_DELAY: PackedScene = preload("res://levels/level_test_portal_delay.tscn")
|
||||
|
||||
func _on_level_button_1_pressed() -> void:
|
||||
get_tree().change_scene_to_packed(LEVEL_5_ROOMS)
|
||||
@onready var items_container: VBoxContainer = $CenterContainer/ItemsContainer
|
||||
|
||||
func _on_level_button_2_pressed() -> void:
|
||||
get_tree().change_scene_to_packed(LEVEL_3_ROOMS)
|
||||
var levels: Dictionary = {
|
||||
"Semaphore": LEVEL_3_ROOMS,
|
||||
"Semaphore - Lights Demo": LEVEL_SEMAPHORE_LIGHTS,
|
||||
"5 rooms": LEVEL_5_ROOMS,
|
||||
"Platform": LEVEL_PLATFORMER,
|
||||
"Recurisve portals - WIP": LEVEL_CUBE_PORTALS,
|
||||
"Multiple Worlds - WIP": LEVEL_HERMIONE,
|
||||
"No Portal Delay?": LEVEL_TEST_PORTAL_DELAY
|
||||
}
|
||||
|
||||
func _on_level_button_3_pressed() -> void:
|
||||
get_tree().change_scene_to_packed(LEVEL_PLATFORMER)
|
||||
func _ready() -> void:
|
||||
for key in levels:
|
||||
var b = Button.new()
|
||||
items_container.add_child(b)
|
||||
b.text = key
|
||||
b.pressed.connect(func(): get_tree().change_scene_to_packed(levels[key]))
|
||||
|
22
menu.tscn
22
menu.tscn
@ -1,6 +1,7 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cim3ul77o0ipr"]
|
||||
[gd_scene load_steps=3 format=3 uid="uid://cim3ul77o0ipr"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cxh40jp4vov4d" path="res://menu.gd" id="1_lti8b"]
|
||||
[ext_resource type="Theme" uid="uid://h8lwapw6q4pv" path="res://menu_theme.tres" id="1_ouk20"]
|
||||
|
||||
[node name="Menu" type="Control"]
|
||||
layout_mode = 3
|
||||
@ -9,6 +10,7 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
theme = ExtResource("1_ouk20")
|
||||
script = ExtResource("1_lti8b")
|
||||
|
||||
[node name="CenterContainer" type="CenterContainer" parent="."]
|
||||
@ -24,24 +26,8 @@ layout_mode = 2
|
||||
|
||||
[node name="Label" type="Label" parent="CenterContainer/ItemsContainer"]
|
||||
layout_mode = 2
|
||||
text = "Portals Demo"
|
||||
text = "Portals Demo - DIploma project"
|
||||
horizontal_alignment = 1
|
||||
|
||||
[node name="HSeparator" type="HSeparator" parent="CenterContainer/ItemsContainer"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="LevelButton_1" type="Button" parent="CenterContainer/ItemsContainer"]
|
||||
layout_mode = 2
|
||||
text = "Square rooms"
|
||||
|
||||
[node name="LevelButton_2" type="Button" parent="CenterContainer/ItemsContainer"]
|
||||
layout_mode = 2
|
||||
text = "Semafor"
|
||||
|
||||
[node name="LevelButton_3" type="Button" parent="CenterContainer/ItemsContainer"]
|
||||
layout_mode = 2
|
||||
text = "Platformer"
|
||||
|
||||
[connection signal="pressed" from="CenterContainer/ItemsContainer/LevelButton_1" to="." method="_on_level_button_1_pressed"]
|
||||
[connection signal="pressed" from="CenterContainer/ItemsContainer/LevelButton_2" to="." method="_on_level_button_2_pressed"]
|
||||
[connection signal="pressed" from="CenterContainer/ItemsContainer/LevelButton_3" to="." method="_on_level_button_3_pressed"]
|
||||
|
7
menu_theme.tres
Normal file
7
menu_theme.tres
Normal file
@ -0,0 +1,7 @@
|
||||
[gd_resource type="Theme" format=3 uid="uid://h8lwapw6q4pv"]
|
||||
|
||||
[resource]
|
||||
Button/font_sizes/font_size = 32
|
||||
HSeparator/constants/separation = 16
|
||||
Label/font_sizes/font_size = 32
|
||||
VBoxContainer/constants/separation = 8
|
BIN
models/kenney-house/Textures/colormap.png
Normal file
BIN
models/kenney-house/Textures/colormap.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.5 KiB |
35
models/kenney-house/Textures/colormap.png.import
Normal file
35
models/kenney-house/Textures/colormap.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dnphrf6dekgvn"
|
||||
path.s3tc="res://.godot/imported/colormap.png-be25d4a14434f049e9335c9189c05045.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/Textures/colormap.png"
|
||||
dest_files=["res://.godot/imported/colormap.png-be25d4a14434f049e9335c9189c05045.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
models/kenney-house/border-corner.glb
Normal file
BIN
models/kenney-house/border-corner.glb
Normal file
Binary file not shown.
43
models/kenney-house/border-corner.glb.import
Normal file
43
models/kenney-house/border-corner.glb.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://b57f1w1ffvjfl"
|
||||
path="res://.godot/imported/border-corner.glb-0619254f56d70d0adb4dd42ae782ecba.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/border-corner.glb"
|
||||
dest_files=["res://.godot/imported/border-corner.glb-0619254f56d70d0adb4dd42ae782ecba.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={
|
||||
"nodes": {
|
||||
"PATH:border-corner": {
|
||||
"generate/physics": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
BIN
models/kenney-house/border.glb
Normal file
BIN
models/kenney-house/border.glb
Normal file
Binary file not shown.
43
models/kenney-house/border.glb.import
Normal file
43
models/kenney-house/border.glb.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://d3yk6et3d4yw3"
|
||||
path="res://.godot/imported/border.glb-a1fe17af1c6910d583cef042a5a9701c.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/border.glb"
|
||||
dest_files=["res://.godot/imported/border.glb-a1fe17af1c6910d583cef042a5a9701c.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={
|
||||
"nodes": {
|
||||
"PATH:border": {
|
||||
"generate/physics": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
BIN
models/kenney-house/column.glb
Normal file
BIN
models/kenney-house/column.glb
Normal file
Binary file not shown.
43
models/kenney-house/column.glb.import
Normal file
43
models/kenney-house/column.glb.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dsogp3m6bedxp"
|
||||
path="res://.godot/imported/column.glb-657830aafa2c47310bb1b8ff06063167.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/column.glb"
|
||||
dest_files=["res://.godot/imported/column.glb-657830aafa2c47310bb1b8ff06063167.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={
|
||||
"nodes": {
|
||||
"PATH:column": {
|
||||
"generate/physics": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
BIN
models/kenney-house/door-rotate-square-c.glb
Normal file
BIN
models/kenney-house/door-rotate-square-c.glb
Normal file
Binary file not shown.
44
models/kenney-house/door-rotate-square-c.glb.import
Normal file
44
models/kenney-house/door-rotate-square-c.glb.import
Normal file
@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://re7f0x1ke0md"
|
||||
path="res://.godot/imported/door-rotate-square-c.glb-c1417ec31599a90af74fc57ed5f2acb5.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/door-rotate-square-c.glb"
|
||||
dest_files=["res://.godot/imported/door-rotate-square-c.glb-c1417ec31599a90af74fc57ed5f2acb5.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={
|
||||
"nodes": {
|
||||
"PATH:door-rotate-square-c/door": {
|
||||
"generate/physics": true,
|
||||
"physics/body_type": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
BIN
models/kenney-house/floor.glb
Normal file
BIN
models/kenney-house/floor.glb
Normal file
Binary file not shown.
43
models/kenney-house/floor.glb.import
Normal file
43
models/kenney-house/floor.glb.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://d347ojn6kwgn2"
|
||||
path="res://.godot/imported/floor.glb-e753c3bd35066eef24427a939bbbfb1d.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/floor.glb"
|
||||
dest_files=["res://.godot/imported/floor.glb-e753c3bd35066eef24427a939bbbfb1d.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={
|
||||
"nodes": {
|
||||
"PATH:floor": {
|
||||
"generate/physics": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
BIN
models/kenney-house/roof-flat-center.glb
Normal file
BIN
models/kenney-house/roof-flat-center.glb
Normal file
Binary file not shown.
43
models/kenney-house/roof-flat-center.glb.import
Normal file
43
models/kenney-house/roof-flat-center.glb.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://b4mndlgalycyh"
|
||||
path="res://.godot/imported/roof-flat-center.glb-8f23942169210678242eb92cebea49e3.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/roof-flat-center.glb"
|
||||
dest_files=["res://.godot/imported/roof-flat-center.glb-8f23942169210678242eb92cebea49e3.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={
|
||||
"nodes": {
|
||||
"PATH:roof-flat-center": {
|
||||
"generate/physics": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
BIN
models/kenney-house/roof-flat-corner.glb
Normal file
BIN
models/kenney-house/roof-flat-corner.glb
Normal file
Binary file not shown.
43
models/kenney-house/roof-flat-corner.glb.import
Normal file
43
models/kenney-house/roof-flat-corner.glb.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://d3qx51q66eftg"
|
||||
path="res://.godot/imported/roof-flat-corner.glb-a0c084a0d7800dcdcdbe5f633c05990c.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/roof-flat-corner.glb"
|
||||
dest_files=["res://.godot/imported/roof-flat-corner.glb-a0c084a0d7800dcdcdbe5f633c05990c.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={
|
||||
"nodes": {
|
||||
"PATH:roof-flat-corner": {
|
||||
"generate/physics": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
BIN
models/kenney-house/roof-flat-side.glb
Normal file
BIN
models/kenney-house/roof-flat-side.glb
Normal file
Binary file not shown.
43
models/kenney-house/roof-flat-side.glb.import
Normal file
43
models/kenney-house/roof-flat-side.glb.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://yqsv32xecxbr"
|
||||
path="res://.godot/imported/roof-flat-side.glb-ab557049d2eaf7cef25c926db44909ce.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/roof-flat-side.glb"
|
||||
dest_files=["res://.godot/imported/roof-flat-side.glb-ab557049d2eaf7cef25c926db44909ce.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={
|
||||
"nodes": {
|
||||
"PATH:roof-flat-side": {
|
||||
"generate/physics": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
BIN
models/kenney-house/wall-corner.glb
Normal file
BIN
models/kenney-house/wall-corner.glb
Normal file
Binary file not shown.
43
models/kenney-house/wall-corner.glb.import
Normal file
43
models/kenney-house/wall-corner.glb.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cy4givcixjenc"
|
||||
path="res://.godot/imported/wall-corner.glb-1a25d3bf79cf2659eaabd5fbcdb07105.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/wall-corner.glb"
|
||||
dest_files=["res://.godot/imported/wall-corner.glb-1a25d3bf79cf2659eaabd5fbcdb07105.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={
|
||||
"nodes": {
|
||||
"PATH:wall-corner": {
|
||||
"generate/physics": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
BIN
models/kenney-house/wall-doorway-square.glb
Normal file
BIN
models/kenney-house/wall-doorway-square.glb
Normal file
Binary file not shown.
43
models/kenney-house/wall-doorway-square.glb.import
Normal file
43
models/kenney-house/wall-doorway-square.glb.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dve8bvx87r1mm"
|
||||
path="res://.godot/imported/wall-doorway-square.glb-7714b1be5989e7155fddd458ccfec05b.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/wall-doorway-square.glb"
|
||||
dest_files=["res://.godot/imported/wall-doorway-square.glb-7714b1be5989e7155fddd458ccfec05b.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={
|
||||
"nodes": {
|
||||
"PATH:wall-doorway-square": {
|
||||
"generate/physics": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
BIN
models/kenney-house/wall-window-square-detailed.glb
Normal file
BIN
models/kenney-house/wall-window-square-detailed.glb
Normal file
Binary file not shown.
46
models/kenney-house/wall-window-square-detailed.glb.import
Normal file
46
models/kenney-house/wall-window-square-detailed.glb.import
Normal file
@ -0,0 +1,46 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://b0k0k4heruf3t"
|
||||
path="res://.godot/imported/wall-window-square-detailed.glb-7ae5d3f7bbc0fc7ff27a838bc27dee6b.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/wall-window-square-detailed.glb"
|
||||
dest_files=["res://.godot/imported/wall-window-square-detailed.glb-7ae5d3f7bbc0fc7ff27a838bc27dee6b.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={
|
||||
"nodes": {
|
||||
"PATH:wall-window-square-detailed": {
|
||||
"generate/physics": true
|
||||
},
|
||||
"PATH:wall-window-square-detailed/(_ignore)": {
|
||||
"import/skip_import": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
BIN
models/kenney-house/wall.glb
Normal file
BIN
models/kenney-house/wall.glb
Normal file
Binary file not shown.
43
models/kenney-house/wall.glb.import
Normal file
43
models/kenney-house/wall.glb.import
Normal file
@ -0,0 +1,43 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bfgvxrgm0dkgi"
|
||||
path="res://.godot/imported/wall.glb-1123b951cefd776d3d2bae84553f3095.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/kenney-house/wall.glb"
|
||||
dest_files=["res://.godot/imported/wall.glb-1123b951cefd776d3d2bae84553f3095.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={
|
||||
"nodes": {
|
||||
"PATH:wall": {
|
||||
"generate/physics": true
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
105
models/portal_mesh.gd
Normal file
105
models/portal_mesh.gd
Normal file
@ -0,0 +1,105 @@
|
||||
@tool
|
||||
extends ArrayMesh
|
||||
class_name PortalMesh
|
||||
|
||||
@export_range(0.1, 10, 0.01) var height: float = 2.0:
|
||||
set(new_val):
|
||||
height = new_val
|
||||
generate_portal_mesh()
|
||||
|
||||
@export_range(0.1, 10, 0.01) var width: float = 1.0:
|
||||
set(new_val):
|
||||
width = new_val
|
||||
generate_portal_mesh()
|
||||
|
||||
## Player camera's NEAR clip distance
|
||||
@export_range(0, 0.2, 0.001) var indent: float = 0.1:
|
||||
set(new_val):
|
||||
indent = new_val
|
||||
generate_portal_mesh()
|
||||
|
||||
func _init() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
generate_portal_mesh()
|
||||
|
||||
func generate_portal_mesh() -> void:
|
||||
print("[PortalMesh] Creating mesh")
|
||||
var _start_time: int = Time.get_ticks_usec()
|
||||
clear_surfaces() # Reset
|
||||
|
||||
var surface_array: Array = []
|
||||
surface_array.resize(Mesh.ARRAY_MAX)
|
||||
|
||||
var verts: PackedVector3Array = PackedVector3Array()
|
||||
var uvs: PackedVector2Array = PackedVector2Array()
|
||||
var normals: PackedVector3Array = PackedVector3Array()
|
||||
var indices: PackedInt32Array = PackedInt32Array()
|
||||
|
||||
# Just to save some chars
|
||||
var w: float = width / 2
|
||||
var h: float = height / 2
|
||||
|
||||
|
||||
# Outside rect
|
||||
var TOP_LEFT: Vector3 = Vector3(-w, h, 0)
|
||||
var TOP_RIGHT: Vector3 = Vector3(w, h, 0)
|
||||
var BOTTOM_LEFT: Vector3 = Vector3(-w, -h, 0)
|
||||
var BOTTOM_RIGHT: Vector3 = Vector3(w, -h, 0)
|
||||
# Inside rect, indented
|
||||
var INDENT_TL: Vector3 = TOP_LEFT + Vector3(indent, -indent, -indent)
|
||||
var INDENT_TR: Vector3 = TOP_RIGHT + Vector3(-indent, -indent, -indent)
|
||||
var INDENT_BL: Vector3 = BOTTOM_LEFT + Vector3(indent, indent, -indent)
|
||||
var INDENT_BR: Vector3 = BOTTOM_RIGHT + Vector3(-indent, indent, -indent)
|
||||
|
||||
verts.append_array([
|
||||
TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT,
|
||||
INDENT_TL, INDENT_TR, INDENT_BL, INDENT_BR
|
||||
])
|
||||
|
||||
var ix: float = indent / width
|
||||
var iy: float = indent / height
|
||||
uvs.append_array([
|
||||
Vector2(0, 0), Vector2(1, 0), Vector2(0, 1), Vector2(1, 1), # Outside UVs
|
||||
Vector2(ix, iy), Vector2(1-ix, iy), Vector2(ix, 1-iy), Vector2(1-ix, 1-iy) # Indented UVs
|
||||
])
|
||||
|
||||
# We are going for a flat-surface look here. Portals should be unshaded anyways.
|
||||
normals.append_array([
|
||||
Vector3.BACK, Vector3.BACK, Vector3.BACK, Vector3.BACK,
|
||||
Vector3.BACK, Vector3.BACK, Vector3.BACK, Vector3.BACK
|
||||
])
|
||||
|
||||
# 0 ----------- 1
|
||||
# | \ / |
|
||||
# | 4-------5 |
|
||||
# | | | |
|
||||
# | | | |
|
||||
# | 6-------7 |
|
||||
# | / \ |
|
||||
# 2 ----------- 3
|
||||
|
||||
# Triangles are clockwise!
|
||||
|
||||
indices.append_array([
|
||||
0, 1, 4,
|
||||
4, 1, 5, # Top section done
|
||||
1, 3, 5,
|
||||
5, 3, 7, # right section done
|
||||
3, 2, 7,
|
||||
7, 2, 6, # bottom section done
|
||||
2, 0, 6,
|
||||
6, 0, 4, # left section done
|
||||
|
||||
4, 5, 6,
|
||||
6, 5, 7, # middle sectiondone
|
||||
])
|
||||
|
||||
surface_array[Mesh.ARRAY_VERTEX] = verts
|
||||
surface_array[Mesh.ARRAY_TEX_UV] = uvs
|
||||
surface_array[Mesh.ARRAY_NORMAL] = normals
|
||||
surface_array[Mesh.ARRAY_INDEX] = indices
|
||||
|
||||
add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, surface_array)
|
||||
|
||||
print("[PortalMesh] Done in %f ms" % [(Time.get_ticks_usec() - _start_time) / 1000.0])
|
||||
|
1
models/portal_mesh.gd.uid
Normal file
1
models/portal_mesh.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://s5kb624h26hs
|
@ -1,6 +1,6 @@
|
||||
extends CharacterBody3D
|
||||
|
||||
@onready var camera: Camera3D = $Camera3D
|
||||
@onready var camera: Camera3D = $PlayerCamera
|
||||
|
||||
const SPEED = 5.0
|
||||
const JUMP_VELOCITY = 4.5
|
||||
|
@ -17,8 +17,9 @@ height = 1.75
|
||||
script = ExtResource("1_4flbx")
|
||||
metadata/teleportable = false
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="."]
|
||||
[node name="PlayerCamera" type="Camera3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.32153, 0)
|
||||
cull_mask = 1048571
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.875, 0)
|
||||
|
@ -6,12 +6,14 @@ extends Node
|
||||
## tonemapping (linear with exposure 1).
|
||||
|
||||
@export var base: WorldEnvironment
|
||||
@export var portals: Array[Portal] = []
|
||||
|
||||
func _ready() -> void:
|
||||
var adapted_env: Environment = base.environment.duplicate(false)
|
||||
adapted_env.tonemap_mode = Environment.TONE_MAPPER_LINEAR
|
||||
# exposure is the only thing the linear tonemapper takes into account
|
||||
adapted_env.tonemap_exposure = 1
|
||||
|
||||
for p in portals:
|
||||
for p in get_tree().get_nodes_in_group("portals"):
|
||||
if p is Portal:
|
||||
p.exit_environment = adapted_env
|
||||
|
||||
|
6
portal_environment_adapter.tscn
Normal file
6
portal_environment_adapter.tscn
Normal file
@ -0,0 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://cxopylew5786r"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://cili3lyodjqel" path="res://portal_environment_adapter.gd" id="1_5srpn"]
|
||||
|
||||
[node name="PortalEnvironmentAdapter" type="Node"]
|
||||
script = ExtResource("1_5srpn")
|
132
procedural_mesh_maker.gd
Normal file
132
procedural_mesh_maker.gd
Normal file
@ -0,0 +1,132 @@
|
||||
@tool
|
||||
extends Node
|
||||
|
||||
|
||||
@export_tool_button("Generate Portal Mesh")
|
||||
var _generate_portal_mesh: Callable = generate_portal_mesh
|
||||
|
||||
@export_tool_button("Remove Mesh")
|
||||
var _remove_mesh: Callable = func(): portal.mesh = null
|
||||
|
||||
|
||||
@export var portal: Portal
|
||||
|
||||
@export_range(0.1, 10, 0.01) var height: float = 2.0:
|
||||
set(v):
|
||||
height = v
|
||||
if Engine.is_editor_hint(): generate_portal_mesh()
|
||||
|
||||
@export_range(0.1, 10, 0.01) var width: float = 1.0:
|
||||
set(v):
|
||||
width = v
|
||||
if Engine.is_editor_hint(): generate_portal_mesh()
|
||||
|
||||
## Player camera's NEAR clip distance
|
||||
@export_range(0, 0.2, 0.001) var indent: float = 0.1:
|
||||
set(v):
|
||||
indent = v
|
||||
generate_portal_mesh()
|
||||
|
||||
@export var portal_material: BaseMaterial3D
|
||||
|
||||
|
||||
func _get_configuration_warnings() -> PackedStringArray:
|
||||
var warnings: Array = []
|
||||
|
||||
if portal == null:
|
||||
warnings.append("Assign a portal to generate the mesh for")
|
||||
|
||||
return warnings
|
||||
|
||||
func generate_portal_mesh() -> void:
|
||||
if portal == null:
|
||||
push_error("No portal")
|
||||
return
|
||||
|
||||
if portal.mesh != null:
|
||||
push_warning("The portal %s already has a mesh! Replacing." % portal.name)
|
||||
portal.mesh = null
|
||||
|
||||
|
||||
var mesh = ArrayMesh.new()
|
||||
print("[PMM] Creating mesh")
|
||||
|
||||
var surface_array: Array = []
|
||||
surface_array.resize(Mesh.ARRAY_MAX)
|
||||
|
||||
var verts: PackedVector3Array = PackedVector3Array()
|
||||
var uvs: PackedVector2Array = PackedVector2Array()
|
||||
var normals: PackedVector3Array = PackedVector3Array()
|
||||
var indices: PackedInt32Array = PackedInt32Array()
|
||||
|
||||
# Just to save some chars
|
||||
var w: float = width / 2
|
||||
var h: float = height / 2
|
||||
|
||||
|
||||
# Outside rect
|
||||
var TOP_LEFT: Vector3 = Vector3(-w, h, 0)
|
||||
var TOP_RIGHT: Vector3 = Vector3(w, h, 0)
|
||||
var BOTTOM_LEFT: Vector3 = Vector3(-w, -h, 0)
|
||||
var BOTTOM_RIGHT: Vector3 = Vector3(w, -h, 0)
|
||||
# Inside rect, indented
|
||||
var INDENT_TL: Vector3 = TOP_LEFT + Vector3(indent, -indent, -indent)
|
||||
var INDENT_TR: Vector3 = TOP_RIGHT + Vector3(-indent, -indent, -indent)
|
||||
var INDENT_BL: Vector3 = BOTTOM_LEFT + Vector3(indent, indent, -indent)
|
||||
var INDENT_BR: Vector3 = BOTTOM_RIGHT + Vector3(-indent, indent, -indent)
|
||||
|
||||
verts.append_array([
|
||||
TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT,
|
||||
INDENT_TL, INDENT_TR, INDENT_BL, INDENT_BR
|
||||
])
|
||||
|
||||
var ix: float = indent / width
|
||||
var iy: float = indent / height
|
||||
uvs.append_array([
|
||||
Vector2(0, 0), Vector2(1, 0), Vector2(0, 1), Vector2(1, 1), # Outside UVs
|
||||
Vector2(ix, iy), Vector2(1-ix, iy), Vector2(ix, 1-iy), Vector2(1-ix, 1-iy) # Indented UVs
|
||||
])
|
||||
|
||||
# We are going for a flat-surface look here. Portals should be unshaded anyways.
|
||||
normals.append_array([
|
||||
Vector3.BACK, Vector3.BACK, Vector3.BACK, Vector3.BACK,
|
||||
Vector3.BACK, Vector3.BACK, Vector3.BACK, Vector3.BACK
|
||||
])
|
||||
|
||||
# 0 ----------- 1
|
||||
# | \ / |
|
||||
# | 4-------5 |
|
||||
# | | | |
|
||||
# | | | |
|
||||
# | 6-------7 |
|
||||
# | / \ |
|
||||
# 2 ----------- 3
|
||||
|
||||
# Triangles are clockwise!
|
||||
|
||||
indices.append_array([
|
||||
0, 1, 4,
|
||||
4, 1, 5, # Top section done
|
||||
1, 3, 5,
|
||||
5, 3, 7, # right section done
|
||||
3, 2, 7,
|
||||
7, 2, 6, # bottom section done
|
||||
2, 0, 6,
|
||||
6, 0, 4, # left section done
|
||||
|
||||
4, 5, 6,
|
||||
6, 5, 7, # middle sectiondone
|
||||
])
|
||||
|
||||
surface_array[Mesh.ARRAY_VERTEX] = verts
|
||||
surface_array[Mesh.ARRAY_TEX_UV] = uvs
|
||||
surface_array[Mesh.ARRAY_NORMAL] = normals
|
||||
surface_array[Mesh.ARRAY_INDEX] = indices
|
||||
|
||||
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, surface_array)
|
||||
if portal_material:
|
||||
mesh.surface_set_material(0, portal_material)
|
||||
mesh.surface_set_name(0, "Portal Material")
|
||||
portal.mesh = mesh
|
||||
|
||||
print("[PMM] Mesh assigned")
|
1
procedural_mesh_maker.gd.uid
Normal file
1
procedural_mesh_maker.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://xt85yw2lp6dw
|
6
procedural_mesh_maker.tscn
Normal file
6
procedural_mesh_maker.tscn
Normal file
@ -0,0 +1,6 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://d1dtxvwk86ple"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://xt85yw2lp6dw" path="res://procedural_mesh_maker.gd" id="1_1a4ua"]
|
||||
|
||||
[node name="ProceduralMeshMaker" type="Node"]
|
||||
script = ExtResource("1_1a4ua")
|
@ -14,6 +14,22 @@ config/name="DP Konzultace"
|
||||
run/main_scene="uid://cim3ul77o0ipr"
|
||||
config/features=PackedStringArray("4.4", "Forward Plus")
|
||||
config/icon="res://icon.svg"
|
||||
config/tags=PackedStringArray("dp")
|
||||
|
||||
[display]
|
||||
|
||||
window/size/viewport_width=1920
|
||||
window/size/viewport_height=1080
|
||||
|
||||
[editor_plugins]
|
||||
|
||||
enabled=PackedStringArray("res://addons/inspector_buttons/plugin.cfg")
|
||||
|
||||
[file_customization]
|
||||
|
||||
folder_colors={
|
||||
"res://addons/": "blue"
|
||||
}
|
||||
|
||||
[input]
|
||||
|
||||
@ -37,8 +53,15 @@ move_back={
|
||||
"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":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
debug_teleport={
|
||||
"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":84,"key_label":0,"unicode":116,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[layer_names]
|
||||
|
||||
3d_render/layer_1="World"
|
||||
3d_render/layer_2="Portals"
|
||||
3d_render/layer_3="Visible only in portals"
|
||||
3d_render/layer_4="Visible only in person"
|
||||
|
100
scripts/my_portal.gd
Normal file
100
scripts/my_portal.gd
Normal file
@ -0,0 +1,100 @@
|
||||
extends MeshInstance3D
|
||||
class_name MyPortal
|
||||
|
||||
## My own portal implementation
|
||||
|
||||
@export var exit_portal: MyPortal
|
||||
|
||||
#preload("res://scripts/my_portal_material.tres")
|
||||
const MY_PORTAL_MATERIAL = preload("uid://cwobk5ik5k5aj")
|
||||
|
||||
var _viewport: SubViewport
|
||||
var _camera: Camera3D = Camera3D.new()
|
||||
var _main_camera: Camera3D = null
|
||||
|
||||
var exit_scale: int = 1 # This is not really needed I think
|
||||
|
||||
func _ready() -> void:
|
||||
assert(exit_portal != null)
|
||||
|
||||
# Update portals last
|
||||
process_priority = 1000
|
||||
_main_camera = get_viewport().get_camera_3d()
|
||||
|
||||
# NOTE: In case the exit portal is in a different world, better put the viewport and camera
|
||||
# onto IT, rather than me (?)
|
||||
_viewport = SubViewport.new()
|
||||
_viewport.name = name + "_Viewport"
|
||||
_viewport.size = get_viewport().size
|
||||
add_child(_viewport)
|
||||
|
||||
_camera.name = name + "_ExitCamera"
|
||||
_viewport.add_child(_camera)
|
||||
|
||||
# FIXME: Remove this - debug only
|
||||
var debug = MeshInstance3D.new()
|
||||
debug.rotate_z(PI / 2)
|
||||
debug.material_override = StandardMaterial3D.new()
|
||||
debug.material_override.albedo_color = Color.MAGENTA
|
||||
debug.mesh = PrismMesh.new()
|
||||
_camera.add_child(debug)
|
||||
|
||||
|
||||
var mat: ShaderMaterial = MY_PORTAL_MATERIAL
|
||||
material_override = mat
|
||||
mat.set_shader_parameter("albedo", _viewport.get_texture())
|
||||
|
||||
print(name, ": _ready")
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
_camera.global_transform = real_to_exit_transform(_main_camera.global_transform)
|
||||
|
||||
# TODO: Adjust near clip plane to the portal
|
||||
_camera.near = _main_camera.near
|
||||
_camera.far = _main_camera.far
|
||||
_camera.fov = _main_camera.fov
|
||||
_camera.keep_aspect = _main_camera.keep_aspect
|
||||
|
||||
|
||||
## Return a new Transform3D relative to the exit portal based on the real Transform3D relative to this portal.
|
||||
func real_to_exit_transform(real:Transform3D) -> Transform3D:
|
||||
# Convert from global space to local space at the entrance (this) portal
|
||||
var local:Transform3D = global_transform.affine_inverse() * real
|
||||
# Compensate for any scale the entrance portal may have
|
||||
var unscaled:Transform3D = local.scaled(global_transform.basis.get_scale())
|
||||
# Flip it (the portal always flips the view 180 degrees)
|
||||
var flipped:Transform3D = unscaled.rotated(Vector3.UP, PI)
|
||||
# Apply any scale the exit portal may have (and apply custom exit scale)
|
||||
var exit_scale_vector:Vector3 = exit_portal.global_transform.basis.get_scale()
|
||||
var scaled_at_exit:Transform3D = flipped.scaled(Vector3.ONE / exit_scale_vector * exit_scale)
|
||||
# Convert from local space at the exit portal to global space
|
||||
var local_at_exit:Transform3D = exit_portal.global_transform * scaled_at_exit
|
||||
return local_at_exit
|
||||
|
||||
## Return a new position relative to the exit portal based on the real position relative to this portal.
|
||||
func real_to_exit_position(real:Vector3) -> Vector3:
|
||||
# Convert from global space to local space at the entrance (this) portal
|
||||
var local:Vector3 = global_transform.affine_inverse() * real
|
||||
# Compensate for any scale the entrance portal may have
|
||||
var unscaled:Vector3 = local * global_transform.basis.get_scale()
|
||||
# Apply any scale the exit portal may have (and apply custom exit scale)
|
||||
var exit_scale_vector:Vector3 = Vector3(-1, 1, 1) * exit_portal.global_transform.basis.get_scale()
|
||||
var scaled_at_exit:Vector3 = unscaled / exit_scale_vector * exit_scale
|
||||
# Convert from local space at the exit portal to global space
|
||||
var local_at_exit:Vector3 = exit_portal.global_transform * scaled_at_exit
|
||||
return local_at_exit
|
||||
|
||||
## Return a new direction relative to the exit portal based on the real direction relative to this portal.
|
||||
func real_to_exit_direction(real:Vector3) -> Vector3:
|
||||
# Convert from global to local space at the entrance (this) portal
|
||||
var local:Vector3 = global_transform.basis.inverse() * real
|
||||
# Compensate for any scale the entrance portal may have
|
||||
var unscaled:Vector3 = local * global_transform.basis.get_scale()
|
||||
# Flip it (the portal always flips the view 180 degrees)
|
||||
var flipped:Vector3 = unscaled.rotated(Vector3.UP, PI)
|
||||
# Apply any scale the exit portal may have (and apply custom exit scale)
|
||||
var exit_scale_vector:Vector3 = exit_portal.global_transform.basis.get_scale()
|
||||
var scaled_at_exit:Vector3 = flipped / exit_scale_vector * exit_scale
|
||||
# Convert from local space at the exit portal to global space
|
||||
var local_at_exit:Vector3 = exit_portal.global_transform.basis * scaled_at_exit
|
||||
return local_at_exit
|
1
scripts/my_portal.gd.uid
Normal file
1
scripts/my_portal.gd.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://dh8miiv7xc4ps
|
25
scripts/my_portal.gdshader
Normal file
25
scripts/my_portal.gdshader
Normal file
@ -0,0 +1,25 @@
|
||||
shader_type spatial;
|
||||
render_mode unshaded;
|
||||
|
||||
|
||||
uniform sampler2D albedo: hint_default_black, source_color;
|
||||
|
||||
varying float pixel_distance;
|
||||
|
||||
void vertex() {
|
||||
// Calculate the world-space distance between the pixel and camera.
|
||||
// Pass the distance to the fragment shader using a varying attribute.
|
||||
vec3 world_position = (MODEL_MATRIX * vec4(VERTEX, 1.0)).xyz;
|
||||
vec3 camera_position = (INV_VIEW_MATRIX * vec4(0.0, 0.0, 0.0, 1.0)).xyz;
|
||||
|
||||
pixel_distance = distance(world_position, camera_position);
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
// The portal color is simply the screen-space color of the exit camera render target.
|
||||
// This is because the exit camera views the exit portal from the perspective of the player watching
|
||||
// the entrance portal, meaning the exit portal will occupy the same screen-space as the entrance portal.
|
||||
vec3 portal_color = texture(albedo, SCREEN_UV).rgb;
|
||||
|
||||
ALBEDO = portal_color;
|
||||
}
|
1
scripts/my_portal.gdshader.uid
Normal file
1
scripts/my_portal.gdshader.uid
Normal file
@ -0,0 +1 @@
|
||||
uid://b6cs66n3vj4di
|
7
scripts/my_portal_material.tres
Normal file
7
scripts/my_portal_material.tres
Normal file
@ -0,0 +1,7 @@
|
||||
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://cwobk5ik5k5aj"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://b6cs66n3vj4di" path="res://scripts/my_portal.gdshader" id="1_3tu08"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_3tu08")
|
19
skybox_world_environment.tscn
Normal file
19
skybox_world_environment.tscn
Normal file
@ -0,0 +1,19 @@
|
||||
[gd_scene load_steps=5 format=3 uid="uid://birikia38m0g7"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cvxwlhcjdg7u7" path="res://textures/kloppenheim_06_puresky_2k.exr" id="1_5twt8"]
|
||||
|
||||
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_ghyw7"]
|
||||
panorama = ExtResource("1_5twt8")
|
||||
|
||||
[sub_resource type="Sky" id="Sky_jfr1b"]
|
||||
sky_material = SubResource("PanoramaSkyMaterial_ghyw7")
|
||||
|
||||
[sub_resource type="Environment" id="Environment_jdap8"]
|
||||
background_mode = 2
|
||||
sky = SubResource("Sky_jfr1b")
|
||||
tonemap_mode = 1
|
||||
tonemap_exposure = 0.53
|
||||
glow_enabled = true
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment"]
|
||||
environment = SubResource("Environment_jdap8")
|
BIN
textures/kloppenheim_06_puresky_2k.exr
Normal file
BIN
textures/kloppenheim_06_puresky_2k.exr
Normal file
Binary file not shown.
35
textures/kloppenheim_06_puresky_2k.exr.import
Normal file
35
textures/kloppenheim_06_puresky_2k.exr.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cvxwlhcjdg7u7"
|
||||
path.bptc="res://.godot/imported/kloppenheim_06_puresky_2k.exr-160a1911b7cbaf5d31339e358952146a.bptc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://textures/kloppenheim_06_puresky_2k.exr"
|
||||
dest_files=["res://.godot/imported/kloppenheim_06_puresky_2k.exr-160a1911b7cbaf5d31339e358952146a.bptc.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
|
7
textures/uv-checker-material.tres
Normal file
7
textures/uv-checker-material.tres
Normal file
@ -0,0 +1,7 @@
|
||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bv36triwinl2f"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://ya8afistbdec" path="res://textures/uv-checker.png" id="1_xdbe0"]
|
||||
|
||||
[resource]
|
||||
shading_mode = 0
|
||||
albedo_texture = ExtResource("1_xdbe0")
|
BIN
textures/uv-checker.png
Normal file
BIN
textures/uv-checker.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 122 KiB |
35
textures/uv-checker.png.import
Normal file
35
textures/uv-checker.png.import
Normal file
@ -0,0 +1,35 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ya8afistbdec"
|
||||
path.s3tc="res://.godot/imported/uv-checker.png-26b18af46d2dfdb0ee67624bb4da1f2d.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://textures/uv-checker.png"
|
||||
dest_files=["res://.godot/imported/uv-checker.png-26b18af46d2dfdb0ee67624bb4da1f2d.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
|
Loading…
Reference in New Issue
Block a user