Add lights demo

+ Semi-dynamic main menu buttons
This commit is contained in:
Vojtěch Struhár 2025-02-13 22:36:34 +01:00
parent b67f0d9263
commit 30d2636fdb
7 changed files with 143 additions and 23 deletions

View File

@ -22,3 +22,10 @@ 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. ž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?? - 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 - 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..?

View File

@ -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="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"] [node name="HUD" type="VBoxContainer"]
theme = ExtResource("1_64ctp")
script = ExtResource("1_37p78") script = ExtResource("1_37p78")
[node name="MenuButton" type="Button" parent="."] [node name="MenuButton" type="Button" parent="."]
@ -10,4 +12,7 @@ unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
text = "Back to Menu" text = "Back to Menu"
[node name="HSeparator" type="HSeparator" parent="."]
layout_mode = 2
[connection signal="pressed" from="MenuButton" to="." method="_on_menu_button_pressed"] [connection signal="pressed" from="MenuButton" to="." method="_on_menu_button_pressed"]

File diff suppressed because one or more lines are too long

20
menu.gd
View File

@ -3,12 +3,20 @@ extends Control
const LEVEL_5_ROOMS = preload("res://levels/level_5rooms.tscn") const LEVEL_5_ROOMS = preload("res://levels/level_5rooms.tscn")
const LEVEL_3_ROOMS = preload("res://levels/level_3_rooms.tscn") const LEVEL_3_ROOMS = preload("res://levels/level_3_rooms.tscn")
const LEVEL_PLATFORMER = preload("res://levels/level_platformer.tscn") const LEVEL_PLATFORMER = preload("res://levels/level_platformer.tscn")
const LEVEL_SEMAPHORE_LIGHTS = preload("res://levels/level_semaphore_lights.tscn")
func _on_level_button_1_pressed() -> void: @onready var items_container: VBoxContainer = $CenterContainer/ItemsContainer
get_tree().change_scene_to_packed(LEVEL_5_ROOMS)
func _on_level_button_2_pressed() -> void: var levels = {
get_tree().change_scene_to_packed(LEVEL_3_ROOMS) "Semaphore": LEVEL_3_ROOMS,
"Semaphore - Lights": LEVEL_SEMAPHORE_LIGHTS,
"5 rooms": LEVEL_5_ROOMS,
"Infinite fall": LEVEL_PLATFORMER
}
func _on_level_button_3_pressed() -> void: func _ready() -> void:
get_tree().change_scene_to_packed(LEVEL_PLATFORMER) 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]))

View File

@ -31,19 +31,3 @@ horizontal_alignment = 1
[node name="HSeparator" type="HSeparator" parent="CenterContainer/ItemsContainer"] [node name="HSeparator" type="HSeparator" parent="CenterContainer/ItemsContainer"]
layout_mode = 2 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"]

View File

@ -19,6 +19,7 @@ metadata/teleportable = false
[node name="Camera3D" type="Camera3D" parent="."] [node name="Camera3D" type="Camera3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.32153, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.32153, 0)
cull_mask = 1048571
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.875, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.875, 0)

View File

@ -47,3 +47,5 @@ move_back={
3d_render/layer_1="World" 3d_render/layer_1="World"
3d_render/layer_2="Portals" 3d_render/layer_2="Portals"
3d_render/layer_3="Visible only in portals"
3d_render/layer_4="Visible only in person"