Compare commits

..
42 Commits
Author SHA1 Message Date
aibrashandClaude Sonnet 5.5 8cd3c50a58 Веб-экспорт: звуки мувмента, погода, хаб-активности, автостарт гонки, рейтинг
Deploy Static Site / deploy (push) Successful in 23s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxZo3hdxigFuyWURXJvYwH
2026-11-02 18:27:27 +05:00
aibrashandClaude Sonnet 5.5 de353321b5 Веб-экспорт: геймпад, меню паузы, новый хаб с музыкой
Deploy Static Site / deploy (push) Successful in 40s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-31 18:36:55 +05:00
aibrashandClaude Sonnet 5.5 b91b2b8674 Race 2: новая карта «Верхние ярусы», пакет race2.pck, обновлённый клиент
Deploy Static Site / deploy (push) Successful in 17s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-29 17:18:07 +05:00
aibrashandClaude Sonnet 5.5 9ab5030136 Обновление игры: ники, общий рейтинг (Tab), сдача в гонке, таймер Parkour, заставка Aman's World
Deploy Static Site / deploy (push) Successful in 18s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1
2026-10-29 12:11:59 +05:00
aibrashandClaude Sonnet 5.5 9f17f9d86d Обновление игры: карта Race (гонка), сетевые события гонки
Deploy Static Site / deploy (push) Successful in 16s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1
2026-10-28 17:28:38 +05:00
aibrashandClaude Sonnet 5.5 1ddd83983a Обновление игры: Parkour с музыкой, небом и шейдером в пакете
Deploy Static Site / deploy (push) Successful in 10s
Исправлен пакет карты: в нём не хватало sky.png, шейдера и данных раскладки.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1
2026-10-28 15:05:47 +05:00
aibrashandClaude Sonnet 5.5 e49bd51704 Обновление игры: карта Parkour, исправлено подтягивание на уступы
Deploy Static Site / deploy (push) Successful in 10s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1
2026-10-28 14:49:36 +05:00
aibrashandClaude Sonnet 5.5 68aa0045ee Обновление игры: сальто камеры при двойном прыжке
Deploy Static Site / deploy (push) Successful in 12s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1
2026-10-28 13:24:37 +05:00
aibrashandClaude Sonnet 5.5 a08b255ac5 Обновление игры: модель персонажа вместо капсул
Deploy Static Site / deploy (push) Successful in 14s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1
2026-10-28 13:11:48 +05:00
aibrashandClaude Sonnet 5.5 7ef8bd7672 Экспорт клиента: новая структура проекта, основной пакет 70 КБ
Deploy Static Site / deploy (push) Successful in 11s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 17:47:47 +05:00
aibrashandClaude Sonnet 5.5 8ae3056386 Экспорт клиента: Верити, сеть преследователей
Deploy Static Site / deploy (push) Successful in 9s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 17:20:29 +05:00
aibrashandClaude Sonnet 5.5 96ada4dad6 Экспорт клиента без GDExtension: один index.wasm
Deploy Static Site / deploy (push) Successful in 11s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 16:51:56 +05:00
aibrashandClaude Sonnet 5.5 3e20ea4f99 Экспорт клиента: хаб, world.pck, присед
Deploy Static Site / deploy (push) Successful in 9s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 16:44:25 +05:00
aibrashandClaude Sonnet 5.5 4cb11893b8 Экспорт клиента: фикс загрузки карты Backrooms
Deploy Static Site / deploy (push) Successful in 9s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 16:33:45 +05:00
aibrashandClaude Sonnet 5.5 daadd6819a Экспорт клиента: Backrooms (отдельный пакет), порталы, зрение камня
Deploy Static Site / deploy (push) Successful in 12s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 16:15:14 +05:00
aibrashandClaude Sonnet 5.5 1b2d2fa9d8 Экспорт клиента: общий камень-преследователь
Deploy Static Site / deploy (push) Successful in 9s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-27 15:22:20 +05:00
aibrash d50a63bcfe Увеличил скорость чувака
Deploy Static Site / deploy (push) Successful in 8s
2026-10-27 15:02:59 +05:00
aibrash b2e3146505 Добавил преследование
Deploy Static Site / deploy (push) Successful in 18s
2026-10-27 14:58:46 +05:00
aibrashandClaude Sonnet 5.5 935415dbef Мультиплеер: новый экспорт клиента
Deploy Static Site / deploy (push) Successful in 8s
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-21 12:32:36 +05:00
aibrash 200d1eccbd Добавил эмпайр стейт
Deploy Static Site / deploy (push) Successful in 8s
2026-10-21 10:50:19 +05:00
aibrash 35f7659638 Обновить README.md
Deploy Static Site / deploy (push) Successful in 7s
2026-10-21 05:25:26 +00:00
aibrash 9135f4481a Добавить README.md
Deploy Static Site / deploy (push) Successful in 9s
2026-10-21 05:24:04 +00:00
aibrash 4171989e84 Добавил офис
Deploy Static Site / deploy (push) Successful in 8s
2026-10-21 10:20:19 +05:00
aibrash 628760e091 Добавил птиц, и дофига деревьев
Deploy Static Site / deploy (push) Successful in 17s
2026-10-21 09:36:02 +05:00
aibrash dffb8147fc Убрал отладку
Deploy Static Site / deploy (push) Successful in 13s
2026-10-17 13:44:19 +05:00
aibrash 101c2c8bb6 Чтото добавил, вроде мувсет, бочи
Deploy Static Site / deploy (push) Successful in 14s
2026-10-17 13:35:03 +05:00
aibrash 4e5b0ae823 Добавил Обелиск
Deploy Static Site / deploy (push) Successful in 8s
2026-10-14 17:59:02 +05:00
aibrash 20242c4c19 Чутка доработал фог
Deploy Static Site / deploy (push) Successful in 8s
2026-10-14 15:02:40 +05:00
aibrash 46430c89e9 Добавил тени и деревья, улучшил фог
Deploy Static Site / deploy (push) Successful in 12s
2026-10-14 14:56:38 +05:00
aibrash bda09d1e04 Улучшил Мувсет
Deploy Static Site / deploy (push) Successful in 7s
2026-10-13 21:57:07 +05:00
aibrash 2f3688427b test звук и туман
Deploy Static Site / deploy (push) Successful in 14s
2026-10-13 21:33:43 +05:00
aibrash e9d50dc4ad Добавил звук и туман
Deploy Static Site / deploy (push) Successful in 8s
2026-10-13 21:29:40 +05:00
aibrash c1b2703038 Полностью поменял мир с трона на шахматку
Deploy Static Site / deploy (push) Successful in 16s
2026-10-13 20:41:05 +05:00
aibrash 6c33c1c3db удалил Test
Deploy Static Site / deploy (push) Successful in 1m9s
2026-10-12 15:43:47 +05:00
aibrash 88a48b44b7 Test
Deploy Static Site / deploy (push) Successful in 6s
2026-10-12 15:05:39 +05:00
aibrash 2c71a4aaf6 Добавил здание возле башни
Deploy Static Site / deploy (push) Successful in 7s
2026-10-12 14:58:45 +05:00
aibrash 443f32addd Тестовый коммит
Deploy Static Site / deploy (push) Successful in 5s
2026-10-12 12:27:01 +05:00
aibrash d4dfd6574f Merge branch 'main' of https://git.ibrash.duckdns.org/aibrash/My-world-Site
Deploy Static Site / deploy (push) Successful in 8s
2026-10-12 12:24:23 +05:00
aibrash c8f7e44903 Добавил типо CI/CD 2026-10-12 12:22:31 +05:00
aibrash 1450b2420c Добавить test 2026-10-12 06:59:49 +00:00
aibrash f77525579a Добавить README.md 2026-10-12 06:47:53 +00:00
aibrash 77261e0b1f first commit 2026-10-12 11:47:05 +05:00
62 changed files with 1442 additions and 1094 deletions
-4
View File
@@ -1,4 +0,0 @@
root = true
[*]
charset = utf-8
-2
View File
@@ -1,2 +0,0 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf
+19
View File
@@ -0,0 +1,19 @@
name: Deploy Static Site
on:
push:
branches: [ "main" ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Pull latest changes via SSH
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.SSH_HOST }}
username: ${{ secrets.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
cd /opt/grid-world/
git pull origin main
echo all good
-3
View File
@@ -1,3 +0,0 @@
# Godot 4+ specific ignores
.godot/
/android/
-47
View File
@@ -1,47 +0,0 @@
[gd_scene format=3 uid="uid://djk5pbfui7ks7"]
[ext_resource type="PackedScene" uid="uid://c8ei5ikik30wn" path="res://landscape/Grid/grid_white.tscn" id="2_cm0pq"]
[ext_resource type="AudioStream" uid="uid://dhc8mgjhhhpsy" path="res://Materials/tron_01.ogg" id="4_cm0pq"]
[ext_resource type="PackedScene" uid="uid://c3efk6k8xnf57" path="res://Player/Player.tscn" id="5_03owx"]
[ext_resource type="PackedScene" uid="uid://db05x4f444mr2" path="res://models/tower_01/Tower_01.glb" id="5_fos0i"]
[ext_resource type="PackedScene" uid="uid://cqndqry1608mu" path="res://models/building_02.glb" id="6_3dxm6"]
[ext_resource type="PackedScene" uid="uid://dr2udwp3pu8g1" path="res://models/house_02/house_02-col.glb" id="6_lgr22"]
[sub_resource type="Environment" id="Environment_bcw3a"]
background_energy_multiplier = 1.2
ambient_light_color = Color(0.17462614, 0.17462593, 0.17462596, 1)
ambient_light_energy = 2.82
glow_enabled = true
glow_blend_mode = 0
glow_hdr_threshold = 0.8
fog_enabled = true
fog_light_color = Color(0.30408522, 0.40256965, 0.43408683, 1)
fog_light_energy = 0.1
fog_sun_scatter = 0.07
fog_density = 0.005
fog_sky_affect = 0.9
[node name="main_world" type="Node3D" unique_id=452092728]
[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=1905581446]
environment = SubResource("Environment_bcw3a")
[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="WorldEnvironment" unique_id=1545130218]
stream = ExtResource("4_cm0pq")
autoplay = true
[node name="Grid-white" parent="." unique_id=1123893336 instance=ExtResource("2_cm0pq")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0073792934, 0.009522438, 0.33711243)
[node name="CharacterBody3D" parent="." unique_id=365865796 instance=ExtResource("5_03owx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.4852746, 1.449548, 2.3875265)
[node name="house_02-col" parent="." unique_id=1283879441 instance=ExtResource("6_lgr22")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.5781927, -0.54343367, 12.694141)
metadata/_edit_lock_ = true
[node name="Tower_01" parent="." unique_id=272196463 instance=ExtResource("5_fos0i")]
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, 41.396, 0, 0)
[node name="building_02" parent="." unique_id=1584750538 instance=ExtResource("6_3dxm6")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, 31.885546, 0.009521484, -11.011906)
Binary file not shown.
-19
View File
@@ -1,19 +0,0 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://2iw2w1cvaa83"
path="res://.godot/imported/End_0f_line.ogg-b2a09fc91ceceaf15f34ad6d3877acd0.oggvorbisstr"
[deps]
source_file="res://Materials/End_0f_line.ogg"
dest_files=["res://.godot/imported/End_0f_line.ogg-b2a09fc91ceceaf15f34ad6d3877acd0.oggvorbisstr"]
[params]
loop=false
loop_offset=0
bpm=0
beat_count=0
bar_beats=4
File diff suppressed because one or more lines are too long
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 MiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://diri1nt1o3uom"
path="res://.godot/imported/Poliigon_GrassPatchyGround_4585_AmbientOcclusion.jpg-71413f4284520407db92f25c7723ce18.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Materials/grass/Poliigon_GrassPatchyGround_4585_AmbientOcclusion.jpg"
dest_files=["res://.godot/imported/Poliigon_GrassPatchyGround_4585_AmbientOcclusion.jpg-71413f4284520407db92f25c7723ce18.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 MiB

@@ -1,41 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dwplniouc0rmw"
path.s3tc="res://.godot/imported/Poliigon_GrassPatchyGround_4585_BaseColor.jpg-944eea5ecb26bd9d2d3beafd723209db.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://Materials/grass/Poliigon_GrassPatchyGround_4585_BaseColor.jpg"
dest_files=["res://.godot/imported/Poliigon_GrassPatchyGround_4585_BaseColor.jpg-944eea5ecb26bd9d2d3beafd723209db.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

@@ -1,40 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dq2ofsahfipu6"
path="res://.godot/imported/Poliigon_GrassPatchyGround_4585_Metallic.jpg-c9f1b911992c91b2b6af25f6dbd059af.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Materials/grass/Poliigon_GrassPatchyGround_4585_Metallic.jpg"
dest_files=["res://.godot/imported/Poliigon_GrassPatchyGround_4585_Metallic.jpg-c9f1b911992c91b2b6af25f6dbd059af.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1
@@ -1,41 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dmrry3rrnwsej"
path.s3tc="res://.godot/imported/Poliigon_GrassPatchyGround_4585_Normal.png-23359acfdc5e692f1b8c6b62de298156.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://Materials/grass/Poliigon_GrassPatchyGround_4585_Normal.png"
dest_files=["res://.godot/imported/Poliigon_GrassPatchyGround_4585_Normal.png-23359acfdc5e692f1b8c6b62de298156.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=1
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=1
roughness/src_normal="res://Materials/grass/Poliigon_GrassPatchyGround_4585_Normal.png"
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 MiB

@@ -1,41 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cfsjjd835bv75"
path.s3tc="res://.godot/imported/Poliigon_GrassPatchyGround_4585_Roughness.jpg-f8c8391d5fb2c5905f50275fc13d3765.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://Materials/grass/Poliigon_GrassPatchyGround_4585_Roughness.jpg"
dest_files=["res://.godot/imported/Poliigon_GrassPatchyGround_4585_Roughness.jpg-f8c8391d5fb2c5905f50275fc13d3765.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.
-19
View File
@@ -1,19 +0,0 @@
[remap]
importer="oggvorbisstr"
type="AudioStreamOggVorbis"
uid="uid://dhc8mgjhhhpsy"
path="res://.godot/imported/tron_01.ogg-27194726fa3b43b19d1b720e44c7e775.oggvorbisstr"
[deps]
source_file="res://Materials/tron_01.ogg"
dest_files=["res://.godot/imported/tron_01.ogg-27194726fa3b43b19d1b720e44c7e775.oggvorbisstr"]
[params]
loop=true
loop_offset=0.0
bpm=0.0
beat_count=0
bar_beats=4
-25
View File
@@ -1,25 +0,0 @@
[gd_scene format=3 uid="uid://c3efk6k8xnf57"]
[ext_resource type="Script" uid="uid://c22hclit1affa" path="res://Player/character_body_3d.gd" id="1_iwpo4"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_h8axm"]
radius = 0.35205078
height = 2.3198242
[sub_resource type="CapsuleMesh" id="CapsuleMesh_bcw3a"]
radius = 0.34472656
height = 2.3242188
[node name="CharacterBody3D" type="CharacterBody3D" unique_id=365865796]
script = ExtResource("1_iwpo4")
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1618285171]
shape = SubResource("CapsuleShape3D_h8axm")
debug_color = Color(0, 0.6, 0.69803923, 1)
[node name="Camera3D" type="Camera3D" parent="." unique_id=1749679416]
transform = Transform3D(1, 0, -1.7484555e-07, 0, 1, 0, 1.7484555e-07, 0, 1, 0, 0.9, 0)
fov = 59.9
[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=81801455]
mesh = SubResource("CapsuleMesh_bcw3a")
-81
View File
@@ -1,81 +0,0 @@
extends CharacterBody3D
# Настройки скорости
const WALK_SPEED = 5.0
const SPRINT_SPEED = 8.5
const JUMP_VELOCITY = 4.5
# Настройки чувствительности мыши
@export var MOUSE_SENSITIVITY: float = 0.003
# --- Настройки тряски камеры (Head Bobbing) ---
const BOB_FREQ = 2.4 # Частота покачивания
const BOB_AMP = 0.08 # Амплитуда покачивания
var bob_time: float = 0.0
# Ссылки на узлы
@onready var head: Node3D = $Camera3D
func _ready() -> void:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("ui_cancel"):
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT:
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
if event is InputEventMouseMotion and Input.mouse_mode == Input.MOUSE_MODE_CAPTURED:
rotate_y(-event.relative.x * MOUSE_SENSITIVITY)
head.rotate_x(-event.relative.y * MOUSE_SENSITIVITY)
head.rotation.x = clamp(head.rotation.x, deg_to_rad(-80), deg_to_rad(80))
func _physics_process(delta: float) -> void:
# 1. Гравитация
if not is_on_floor():
velocity += get_gravity() * delta
# 2. Прыжок на Пробел
if Input.is_key_pressed(KEY_SPACE) and is_on_floor():
velocity.y = JUMP_VELOCITY
# 3. Определение скорости (Спринт)
var current_speed := WALK_SPEED
if Input.is_key_pressed(KEY_SHIFT):
current_speed = SPRINT_SPEED
# 4. Управление WASD
var input_dir := Vector2.ZERO
if Input.is_key_pressed(KEY_D):
input_dir.x += 1
if Input.is_key_pressed(KEY_A):
input_dir.x -= 1
if Input.is_key_pressed(KEY_S):
input_dir.y += 1
if Input.is_key_pressed(KEY_W):
input_dir.y -= 1
input_dir = input_dir.normalized()
# 5. Движение относительно взгляда персонажа
var direction := (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity.x = direction.x * current_speed
velocity.z = direction.z * current_speed
else:
velocity.x = move_toward(velocity.x, 0, current_speed)
velocity.z = move_toward(velocity.z, 0, current_speed)
# 6. Эффект тряски / раскачивания камеры (Head Bobbing)
bob_time += delta * velocity.length() * float(is_on_floor())
head.transform.origin = _head_bob(bob_time)
move_and_slide()
# Функция расчета позиционирования камеры при шагах
func _head_bob(time: float) -> Vector3:
var pos := Vector3.ZERO
pos.y = sin(time * BOB_FREQ) * BOB_AMP
pos.x = cos(time * BOB_FREQ / 2) * BOB_AMP
return pos
-1
View File
@@ -1 +0,0 @@
uid://c22hclit1affa
+15
View File
@@ -0,0 +1,15 @@
# grid-world — готовая веб-сборка игры
Здесь только **результат экспорта** из Godot (проект — в соседнем репозитории `my-world`). Руками ничего не правится.
Пуш в `main` запускает CI (`.gitea/workflows/deploy.yml`): ssh на сервер и `git pull` в `/opt/grid-world`, откуда nginx отдаёт сайт.
| Файл | Что это | Размер |
|---|---|---|
| `index.html`, `index.js`, `index.png`, `index.icon.png`, `index.apple-touch-icon.png`, `index.audio*.js` | страница и загрузчик | мелочь |
| `index.wasm` | движок Godot | 39,5 МБ (~10 МБ по сети с gzip) |
| `index.pck` | основная игра: хаб, игрок, сеть, порталы | ~70 КБ |
| `world.pck` | карта «Песочница» (качается при входе в портал) | ~13,6 МБ |
| `backrooms.pck` | карта «Backrooms» (качается при входе в портал) | ~21,3 МБ |
Пакеты карт (`*.pck`) должны быть выложены **вместе** с `index.*` и той же версией: клиент качает их при первом входе в портал.
Как собрать: в проекте `my-world` выполнить `tools/export_all.sh`. Подробности, деплой сервера и устройство — в `my-world/README.md`.
BIN
View File
Binary file not shown.
-171
View File
@@ -1,171 +0,0 @@
[runnable_presets]
"Windows Desktop"="Windows Desktop"
Linux="Linux"
Web="Web"
[preset.0]
name="Windows Desktop"
platform="Windows Desktop"
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../Мой Мирок.exe"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
patch_delta_min_reduction=0.1
patch_delta_include_filters="*"
patch_delta_exclude_filters=""
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.0.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
shader_baker/enabled=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
application/export_angle=0
application/export_d3d12=0
application/d3d12_agility_sdk_multiarch=true
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"
[preset.1]
name="Linux"
platform="Linux"
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../linux/server.x86_64"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
patch_delta_min_reduction=0.1
patch_delta_include_filters="*"
patch_delta_exclude_filters=""
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
shader_baker/enabled=false
binary_format/architecture="x86_64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
pkill -x -f \"{temp_dir}/{exe_name} {cmd_args}\"
rm -rf \"{temp_dir}\""
[preset.2]
name="Web"
platform="Web"
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="../site/index.html"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
patch_delta_min_reduction=0.1
patch_delta_include_filters="*"
patch_delta_exclude_filters=""
encryption_include_filters=""
encryption_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.2.options]
custom_template/debug=""
custom_template/release=""
variant/extensions_support=false
variant/thread_support=false
vram_texture_compression/for_desktop=true
vram_texture_compression/for_mobile=false
html/export_icon=true
html/custom_html_shell=""
html/head_include=""
html/canvas_resize_policy=2
html/focus_canvas_on_start=true
html/experimental_virtual_keyboard=false
progressive_web_app/enabled=false
progressive_web_app/ensure_cross_origin_isolation_headers=true
progressive_web_app/offline_page=""
progressive_web_app/display=1
progressive_web_app/orientation=0
progressive_web_app/icon_144x144=""
progressive_web_app/icon_180x180=""
progressive_web_app/icon_512x512=""
progressive_web_app/background_color=Color(0, 0, 0, 1)
threads/emscripten_pool_size=8
threads/godot_pool_size=4
-1
View File
@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><rect width="124" height="124" x="2" y="2" fill="#363d52" stroke="#212532" stroke-width="4" rx="14"/><g fill="#fff" transform="translate(12.322 12.322)scale(.101)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(12.322 12.322)scale(.101)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>

Before

Width:  |  Height:  |  Size: 995 B

-43
View File
@@ -1,43 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://smxpxx0ioxus"
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.svg"
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

+66
View File
@@ -0,0 +1,66 @@
/**************************************************************************/
/* godot.audio.position.worklet.js */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
class GodotPositionReportingProcessor extends AudioWorkletProcessor {
static get parameterDescriptors() {
return [
{
name: 'reset',
defaultValue: 0,
minValue: 0,
maxValue: 1,
automationRate: 'k-rate',
},
];
}
constructor(...args) {
super(...args);
this.position = 0;
}
process(inputs, _outputs, parameters) {
if (parameters['reset'][0] > 0) {
this.position = 0;
}
if (inputs.length > 0) {
const input = inputs[0];
if (input.length > 0) {
this.position += input[0].length;
this.port.postMessage({ type: 'position', data: this.position });
}
}
return true;
}
}
registerProcessor('godot-position-reporting-processor', GodotPositionReportingProcessor);
+213
View File
@@ -0,0 +1,213 @@
/**************************************************************************/
/* audio.worklet.js */
/**************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* https://godotengine.org */
/**************************************************************************/
/* Copyright (c) 2014-present Godot Engine contributors (see AUTHORS.md). */
/* Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. */
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/**************************************************************************/
class RingBuffer {
constructor(p_buffer, p_state, p_threads) {
this.buffer = p_buffer;
this.avail = p_state;
this.threads = p_threads;
this.rpos = 0;
this.wpos = 0;
}
data_left() {
return this.threads ? Atomics.load(this.avail, 0) : this.avail;
}
space_left() {
return this.buffer.length - this.data_left();
}
read(output) {
const size = this.buffer.length;
let from = 0;
let to_write = output.length;
if (this.rpos + to_write > size) {
const high = size - this.rpos;
output.set(this.buffer.subarray(this.rpos, size));
from = high;
to_write -= high;
this.rpos = 0;
}
if (to_write) {
output.set(this.buffer.subarray(this.rpos, this.rpos + to_write), from);
}
this.rpos += to_write;
if (this.threads) {
Atomics.add(this.avail, 0, -output.length);
Atomics.notify(this.avail, 0);
} else {
this.avail -= output.length;
}
}
write(p_buffer) {
const to_write = p_buffer.length;
const mw = this.buffer.length - this.wpos;
if (mw >= to_write) {
this.buffer.set(p_buffer, this.wpos);
this.wpos += to_write;
if (mw === to_write) {
this.wpos = 0;
}
} else {
const high = p_buffer.subarray(0, mw);
const low = p_buffer.subarray(mw);
this.buffer.set(high, this.wpos);
this.buffer.set(low);
this.wpos = low.length;
}
if (this.threads) {
Atomics.add(this.avail, 0, to_write);
Atomics.notify(this.avail, 0);
} else {
this.avail += to_write;
}
}
}
class GodotProcessor extends AudioWorkletProcessor {
constructor() {
super();
this.threads = false;
this.running = true;
this.lock = null;
this.notifier = null;
this.output = null;
this.output_buffer = new Float32Array();
this.input = null;
this.input_buffer = new Float32Array();
this.port.onmessage = (event) => {
const cmd = event.data['cmd'];
const data = event.data['data'];
this.parse_message(cmd, data);
};
}
process_notify() {
if (this.notifier) {
Atomics.add(this.notifier, 0, 1);
Atomics.notify(this.notifier, 0);
}
}
parse_message(p_cmd, p_data) {
if (p_cmd === 'start' && p_data) {
const state = p_data[0];
let idx = 0;
this.threads = true;
this.lock = state.subarray(idx, ++idx);
this.notifier = state.subarray(idx, ++idx);
const avail_in = state.subarray(idx, ++idx);
const avail_out = state.subarray(idx, ++idx);
this.input = new RingBuffer(p_data[1], avail_in, true);
this.output = new RingBuffer(p_data[2], avail_out, true);
} else if (p_cmd === 'stop') {
this.running = false;
this.output = null;
this.input = null;
this.lock = null;
this.notifier = null;
} else if (p_cmd === 'start_nothreads') {
this.output = new RingBuffer(p_data[0], p_data[0].length, false);
} else if (p_cmd === 'chunk') {
this.output.write(p_data);
}
}
static array_has_data(arr) {
return arr.length && arr[0].length && arr[0][0].length;
}
process(inputs, outputs, parameters) {
if (!this.running) {
return false; // Stop processing.
}
if (this.output === null) {
return true; // Not ready yet, keep processing.
}
const process_input = GodotProcessor.array_has_data(inputs);
if (process_input) {
const input = inputs[0];
const chunk = input[0].length * input.length;
if (this.input_buffer.length !== chunk) {
this.input_buffer = new Float32Array(chunk);
}
if (!this.threads) {
GodotProcessor.write_input(this.input_buffer, input);
this.port.postMessage({ 'cmd': 'input', 'data': this.input_buffer });
} else if (this.input.space_left() >= chunk) {
GodotProcessor.write_input(this.input_buffer, input);
this.input.write(this.input_buffer);
} else {
// this.port.postMessage('Input buffer is full! Skipping input frame.'); // Uncomment this line to debug input buffer.
}
}
const process_output = GodotProcessor.array_has_data(outputs);
if (process_output) {
const output = outputs[0];
const chunk = output[0].length * output.length;
if (this.output_buffer.length !== chunk) {
this.output_buffer = new Float32Array(chunk);
}
if (this.output.data_left() >= chunk) {
this.output.read(this.output_buffer);
GodotProcessor.write_output(output, this.output_buffer);
if (!this.threads) {
this.port.postMessage({ 'cmd': 'read', 'data': chunk });
}
} else {
// this.port.postMessage('Output buffer has not enough frames! Skipping output frame.'); // Uncomment this line to debug output buffer.
}
}
this.process_notify();
return true;
}
static write_output(dest, source) {
const channels = dest.length;
for (let ch = 0; ch < channels; ch++) {
for (let sample = 0; sample < dest[ch].length; sample++) {
dest[ch][sample] = source[sample * channels + ch];
}
}
}
static write_input(dest, source) {
const channels = source.length;
for (let ch = 0; ch < channels; ch++) {
for (let sample = 0; sample < source[ch].length; sample++) {
dest[sample * channels + ch] = source[ch][sample];
}
}
}
}
registerProcessor('godot-processor', GodotProcessor);
+220
View File
@@ -0,0 +1,220 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
<title>Aman's World</title>
<style>
html, body, #canvas {
margin: 0;
padding: 0;
border: 0;
}
body {
color: white;
background-color: black;
overflow: hidden;
touch-action: none;
}
#canvas {
display: block;
}
#canvas:focus {
outline: none;
}
#status, #status-splash, #status-progress {
position: absolute;
left: 0;
right: 0;
}
#status, #status-splash {
top: 0;
bottom: 0;
}
#status {
background-color: #08080a;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
visibility: hidden;
}
#status-splash {
max-height: 100%;
max-width: 100%;
margin: auto;
}
#status-splash.show-image--false {
display: none;
}
#status-splash.fullsize--true {
height: 100%;
width: 100%;
object-fit: contain;
}
#status-splash.use-filter--false {
image-rendering: pixelated;
}
#status-progress, #status-notice {
display: none;
}
#status-progress {
bottom: 10%;
width: 50%;
margin: 0 auto;
}
#status-notice {
background-color: #5b3943;
border-radius: 0.5rem;
border: 1px solid #9b3943;
color: #e0e0e0;
font-family: 'Noto Sans', 'Droid Sans', Arial, sans-serif;
line-height: 1.3;
margin: 0 2rem;
overflow: hidden;
padding: 1rem;
text-align: center;
z-index: 1;
}
</style>
<link id="-gd-engine-icon" rel="icon" type="image/png" href="index.icon.png" />
<link rel="apple-touch-icon" href="index.apple-touch-icon.png"/>
</head>
<body>
<canvas id="canvas">
Your browser does not support the canvas tag.
</canvas>
<noscript>
Your browser does not support JavaScript.
</noscript>
<div id="status">
<img id="status-splash" class="show-image--true fullsize--true use-filter--true" src="index.png" alt="">
<progress id="status-progress"></progress>
<div id="status-notice"></div>
</div>
<script src="index.js"></script>
<script>
const GODOT_CONFIG = {"args":[],"canvasResizePolicy":2,"emscriptenPoolSize":8,"ensureCrossOriginIsolationHeaders":true,"executable":"index","experimentalVK":false,"fileSizes":{"index.pck":1773292,"index.wasm":39514754},"focusCanvas":true,"gdextensionLibs":[],"godotPoolSize":4};
const GODOT_THREADS_ENABLED = false;
const engine = new Engine(GODOT_CONFIG);
(function () {
const statusOverlay = document.getElementById('status');
const statusProgress = document.getElementById('status-progress');
const statusNotice = document.getElementById('status-notice');
let initializing = true;
let statusMode = '';
function setStatusMode(mode) {
if (statusMode === mode || !initializing) {
return;
}
if (mode === 'hidden') {
statusOverlay.remove();
initializing = false;
return;
}
statusOverlay.style.visibility = 'visible';
statusProgress.style.display = mode === 'progress' ? 'block' : 'none';
statusNotice.style.display = mode === 'notice' ? 'block' : 'none';
statusMode = mode;
}
function setStatusNotice(text) {
while (statusNotice.lastChild) {
statusNotice.removeChild(statusNotice.lastChild);
}
const lines = text.split('\n');
lines.forEach((line) => {
statusNotice.appendChild(document.createTextNode(line));
statusNotice.appendChild(document.createElement('br'));
});
}
function displayFailureNotice(err) {
console.error(err);
if (err instanceof Error) {
setStatusNotice(err.message);
} else if (typeof err === 'string') {
setStatusNotice(err);
} else {
setStatusNotice('An unknown error occurred.');
}
setStatusMode('notice');
initializing = false;
}
const missing = Engine.getMissingFeatures({
threads: GODOT_THREADS_ENABLED,
});
if (missing.length !== 0) {
if (GODOT_CONFIG['serviceWorker'] && GODOT_CONFIG['ensureCrossOriginIsolationHeaders'] && 'serviceWorker' in navigator) {
let serviceWorkerRegistrationPromise;
try {
serviceWorkerRegistrationPromise = navigator.serviceWorker.getRegistration();
} catch (err) {
serviceWorkerRegistrationPromise = Promise.reject(new Error('Service worker registration failed.'));
}
// There's a chance that installing the service worker would fix the issue
Promise.race([
serviceWorkerRegistrationPromise.then((registration) => {
if (registration != null) {
return Promise.reject(new Error('Service worker already exists.'));
}
return registration;
}).then(() => engine.installServiceWorker()),
// For some reason, `getRegistration()` can stall
new Promise((resolve) => {
setTimeout(() => resolve(), 2000);
}),
]).then(() => {
// Reload if there was no error.
window.location.reload();
}).catch((err) => {
console.error('Error while registering service worker:', err);
});
} else {
// Display the message as usual
const missingMsg = 'Error\nThe following features required to run Godot projects on the Web are missing:\n';
displayFailureNotice(missingMsg + missing.join('\n'));
}
} else {
setStatusMode('progress');
engine.startGame({
'onProgress': function (current, total) {
if (current > 0 && total > 0) {
statusProgress.value = current;
statusProgress.max = total;
} else {
statusProgress.removeAttribute('value');
statusProgress.removeAttribute('max');
}
},
}).then(() => {
setStatusMode('hidden');
}, displayFailureNotice);
}
}());
</script>
</body>
</html>
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

+909
View File
File diff suppressed because one or more lines are too long
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
View File
Binary file not shown.
Binary file not shown.
-45
View File
@@ -1,45 +0,0 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://b8sirpgse4wep"
path="res://.godot/imported/Grid-white.glb-3fe245ebce6662979ef998a91170512e.scn"
[deps]
source_file="res://landscape/Grid/Grid-white.glb"
dest_files=["res://.godot/imported/Grid-white.glb-3fe245ebce6662979ef998a91170512e.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
mesh_library/use_node_names_as_mesh_names=false
array_mesh/deduplicate_surfaces=true
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1
gltf/texture_map_mode=1
File diff suppressed because one or more lines are too long
Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 KiB

@@ -1,41 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cngsbhpa05fo8"
path.s3tc="res://.godot/imported/tron_floor_emission.png-2799b860af52fd337e583b57826fafee.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://landscape/Grid/tron_floor_emission.png"
dest_files=["res://.godot/imported/tron_floor_emission.png-2799b860af52fd337e583b57826fafee.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
-12
View File
@@ -1,12 +0,0 @@
# Blender 5.2.0 LTS MTL File: 'None'
# www.blender.org
newmtl Материал
Ns 250.000000
Ka 1.000000 1.000000 1.000000
Kd 0.000303 0.489847 0.002281
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
Binary file not shown.
-45
View File
@@ -1,45 +0,0 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://cqndqry1608mu"
path="res://.godot/imported/building_02.glb-cb716a43bf2c47a83086e2a15b4e29f9.scn"
[deps]
source_file="res://models/building_02.glb"
dest_files=["res://.godot/imported/building_02.glb-cb716a43bf2c47a83086e2a15b4e29f9.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
mesh_library/use_node_names_as_mesh_names=false
array_mesh/deduplicate_surfaces=true
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1
gltf/texture_map_mode=1
Binary file not shown.
-45
View File
@@ -1,45 +0,0 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://dr2udwp3pu8g1"
path="res://.godot/imported/house_02-col.glb-17408b57ee4b7d0e0d0a0da0d4e0dd93.scn"
[deps]
source_file="res://models/house_02/house_02-col.glb"
dest_files=["res://.godot/imported/house_02-col.glb-17408b57ee4b7d0e0d0a0da0d4e0dd93.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
mesh_library/use_node_names_as_mesh_names=false
array_mesh/deduplicate_surfaces=true
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
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=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1
gltf/texture_map_mode=1
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

@@ -1,44 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://rwgorah4jgx1"
path.s3tc="res://.godot/imported/house_02-col_бревно.webp-e8a6b0a715c9a02ca83340de3c6ce4b6.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "0404fc78a37a73b82a32d7e096573c1d"
}
[deps]
source_file="res://models/house_02/house_02-col_бревно.webp"
dest_files=["res://.godot/imported/house_02-col_бревно.webp-e8a6b0a715c9a02ca83340de3c6ce4b6.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

@@ -1,44 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://e2e5vo80xstq"
path.s3tc="res://.godot/imported/house_02-col_булыжник.jpg-9b1ccd0008b1bd0c163d5f93a1e31228.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "af0846b9aad4c40eeab5f735a92a1129"
}
[deps]
source_file="res://models/house_02/house_02-col_булыжник.jpg"
dest_files=["res://.godot/imported/house_02-col_булыжник.jpg-9b1ccd0008b1bd0c163d5f93a1e31228.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

@@ -1,44 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b3my1h6q7jfwn"
path.s3tc="res://.godot/imported/house_02-col_доски.png-c72fe1bbc031cea57d00bb33d2692581.s3tc.ctex"
metadata={
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
generator_parameters={
"md5": "50c5a5ae6740cb2b091e5a15318d913b"
}
[deps]
source_file="res://models/house_02/house_02-col_доски.png"
dest_files=["res://.godot/imported/house_02-col_доски.png-c72fe1bbc031cea57d00bb33d2692581.s3tc.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
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/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
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
-12
View File
@@ -1,12 +0,0 @@
# Blender 5.2.0 LTS MTL File: 'None'
# www.blender.org
newmtl Material
Ns 250.000000
Ka 1.000000 1.000000 1.000000
Kd 0.800000 0.800000 0.800000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.500000
d 1.000000
illum 2
Binary file not shown.
-45
View File
@@ -1,45 +0,0 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://db05x4f444mr2"
path="res://.godot/imported/Tower_01.glb-724f563bb4f1b3ed4316e8d1441f9c1c.scn"
[deps]
source_file="res://models/tower_01/Tower_01.glb"
dest_files=["res://.godot/imported/Tower_01.glb-724f563bb4f1b3ed4316e8d1441f9c1c.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
mesh_library/use_node_names_as_mesh_names=false
array_mesh/deduplicate_surfaces=true
nodes/apply_root_scale=true
nodes/root_scale=1.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=2
meshes/lightmap_texel_size=1.781
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=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1
gltf/texture_map_mode=1
Binary file not shown.
BIN
View File
Binary file not shown.
-33
View File
@@ -1,33 +0,0 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=5
[application]
config/name="Мой Мирок"
run/main_scene="uid://djk5pbfui7ks7"
config/features=PackedStringArray("4.7", "Forward Plus")
config/icon="res://icon.svg"
[display]
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
[filesystem]
import/blender/enabled=false
[physics]
3d/physics_engine="Jolt Physics"
[rendering]
rendering_device/driver.windows="d3d12"
BIN
View File
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 MiB

After

Width:  |  Height:  |  Size: 9.0 MiB

BIN
View File
Binary file not shown.