Карта Backrooms, порталы, комнаты по картам и зрение камня
- Backrooms на готовой модели (CC-BY, VTX): отдельный пакет backrooms.pck, качается при первом входе в портал (World/map_loader.gd), навмеш запечён заранее. - Порталы между картами (World/portal.gd); выход из Backrooms возвращает в мир. - Мультиплеер: игроки и общий камень делятся на комнаты по картам (Net/net.gd). - Камень видит игрока только вблизи или в поле зрения, может потерять и бродит по навмешу (sight_limited); в мире и в Backrooms включено. - Экспорт: пресет Backrooms для пакета карты, основной пресет без неё. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
extends Node3D
|
||||
# Backrooms на готовой модели. Сцена живёт в отдельном пакете (backrooms.pck) и качается
|
||||
# только при первом входе в портал. Коллизии строим по мешам модели при загрузке,
|
||||
# навмеш для камня запечён заранее (backrooms_nav.res) — в вебе запекать на лету долго.
|
||||
|
||||
func _ready() -> void:
|
||||
Net.enter_map("backrooms")
|
||||
_build_colliders()
|
||||
_build_environment()
|
||||
_build_hum()
|
||||
|
||||
func _build_colliders() -> void:
|
||||
for mi in $Map.find_children("*", "MeshInstance3D", true, false):
|
||||
mi.create_trimesh_collision()
|
||||
|
||||
func _build_environment() -> void:
|
||||
var env := Environment.new()
|
||||
env.background_mode = Environment.BG_COLOR
|
||||
env.background_color = Color(0.06, 0.05, 0.03)
|
||||
env.ambient_light_source = Environment.AMBIENT_SOURCE_COLOR
|
||||
env.ambient_light_color = Color(1.0, 0.95, 0.8)
|
||||
env.ambient_light_energy = 0.7
|
||||
env.fog_enabled = true
|
||||
env.fog_light_color = Color(0.25, 0.2, 0.09)
|
||||
env.fog_density = 0.012
|
||||
var we := WorldEnvironment.new()
|
||||
we.environment = env
|
||||
add_child(we)
|
||||
|
||||
# Гул ламп: 2 секунды, частоты кратны 0.5 Гц — петля без щелчка
|
||||
func _build_hum() -> void:
|
||||
const RATE := 11025
|
||||
var n := RATE * 2
|
||||
var data := PackedByteArray()
|
||||
data.resize(n * 2)
|
||||
var rng := RandomNumberGenerator.new()
|
||||
rng.seed = 5
|
||||
for i in n:
|
||||
var t := float(i) / RATE
|
||||
var s := 0.50 * sin(TAU * 60.0 * t) + 0.25 * sin(TAU * 120.0 * t) \
|
||||
+ 0.12 * sin(TAU * 180.0 * t) + 0.06 * sin(TAU * 240.0 * t)
|
||||
s += rng.randf_range(-1.0, 1.0) * 0.03
|
||||
data.encode_s16(i * 2, int(clampf(s, -1.0, 1.0) * 12000.0))
|
||||
var wav := AudioStreamWAV.new()
|
||||
wav.format = AudioStreamWAV.FORMAT_16_BITS
|
||||
wav.mix_rate = RATE
|
||||
wav.stereo = false
|
||||
wav.loop_mode = AudioStreamWAV.LOOP_FORWARD
|
||||
wav.loop_begin = 0
|
||||
wav.loop_end = n
|
||||
wav.data = data
|
||||
var player := AudioStreamPlayer.new()
|
||||
player.stream = wav
|
||||
player.volume_db = -12.0
|
||||
player.autoplay = true
|
||||
add_child(player)
|
||||
@@ -0,0 +1 @@
|
||||
uid://gmpkjl6m3415
|
||||
@@ -0,0 +1,35 @@
|
||||
[gd_scene format=3 uid="uid://djgkggvwiaaoy"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://gmpkjl6m3415" path="res://World/Backrooms/backrooms.gd" id="1_level"]
|
||||
[ext_resource type="PackedScene" uid="uid://b8ef3wy1pthgm" path="res://models/backrooms/backrooms_vr.glb" id="2_map"]
|
||||
[ext_resource type="PackedScene" uid="uid://c3efk6k8xnf57" path="res://Player/Player.tscn" id="3_player"]
|
||||
[ext_resource type="PackedScene" path="res://models/Bochi-Rock/rock.tscn" id="4_rock"]
|
||||
[ext_resource type="Script" uid="uid://bu8v0ivhmnykt" path="res://World/portal.gd" id="5_portal"]
|
||||
[ext_resource type="NavigationMesh" path="res://World/Backrooms/backrooms_nav.res" id="6_nav"]
|
||||
|
||||
[node name="Backrooms" type="Node3D" unique_id=511186617]
|
||||
script = ExtResource("1_level")
|
||||
|
||||
[node name="Map" parent="." unique_id=82811432 instance=ExtResource("2_map")]
|
||||
transform = Transform3D(1.4, 0, 0, 0, 1.4, 0, 0, 0, 1.4, 0, 0, 0)
|
||||
|
||||
[node name="Player" parent="." unique_id=143512730 instance=ExtResource("3_player")]
|
||||
transform = Transform3D(0, 0, 1, 0, 1, 0, -1, 0, 0, -0.4838078, 1.2, 2.0468445)
|
||||
|
||||
[node name="Rock" parent="." unique_id=311663607 instance=ExtResource("4_rock")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -48, 0, 3)
|
||||
speed = 10.0
|
||||
catch_distance = 2.0
|
||||
catch_height = 3.0
|
||||
sight_limited = true
|
||||
|
||||
[node name="Exit" type="Area3D" parent="." unique_id=1540431614]
|
||||
transform = Transform3D(0, 0, 1, 0, 1, 0, -1, 0, 0, -72, -0.15, 9)
|
||||
script = ExtResource("5_portal")
|
||||
target_map = "world"
|
||||
target_scene = "res://main.tscn"
|
||||
title = "EXIT"
|
||||
color = Color(0.3, 1, 0.45, 1)
|
||||
|
||||
[node name="Navigation" type="NavigationRegion3D" parent="." unique_id=122126248]
|
||||
navigation_mesh = ExtResource("6_nav")
|
||||
Binary file not shown.
Reference in New Issue
Block a user