Compare commits
10 Commits
3ef5254792
...
aa3839a02a
| Author | SHA1 | Date | |
|---|---|---|---|
|
aa3839a02a
|
|||
|
9293b1c96b
|
|||
|
3f1f4b1811
|
|||
|
151a757e3e
|
|||
|
ca63d4594c
|
|||
|
591225996d
|
|||
|
ac49bcee0b
|
|||
|
4e65d2c43b
|
|||
|
be682b2813
|
|||
|
c8c5c08b4d
|
@@ -1,3 +1,5 @@
|
||||
# Godot 4+ specific ignores
|
||||
.godot/
|
||||
/android/
|
||||
build/
|
||||
*.tmp
|
||||
|
||||
@@ -0,0 +1,129 @@
|
||||
[preset.0]
|
||||
|
||||
name="Windows Desktop"
|
||||
platform="Windows Desktop"
|
||||
runnable=false
|
||||
advanced_options=false
|
||||
dedicated_server=false
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="build/instructions-clear-win-desktop.exe"
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
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
|
||||
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
|
||||
$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="Windows Server"
|
||||
platform="Windows Desktop"
|
||||
runnable=false
|
||||
advanced_options=false
|
||||
dedicated_server=false
|
||||
custom_features="dedicated_server"
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="build/instructions-clear-win-server.exe"
|
||||
encryption_include_filters=""
|
||||
encryption_exclude_filters=""
|
||||
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
|
||||
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
|
||||
$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}'"
|
||||
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://diptcpjxid3cm"]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color(0.799569, 0, 0.0857406, 1)
|
||||
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://chp3rogcgumau"]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color(0.054902, 0.431373, 0.129412, 1)
|
||||
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://ccrb46njti2ke"]
|
||||
|
||||
[resource]
|
||||
albedo_color = Color(0.270588, 0.596078, 1, 1)
|
||||
@@ -0,0 +1,4 @@
|
||||
[gd_resource type="PlaneMesh" format=3 uid="uid://dwpvym2kc4gd8"]
|
||||
|
||||
[resource]
|
||||
size = Vector2(10000, 10000)
|
||||
|
After Width: | Height: | Size: 95 B |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bk722l8idpuov"
|
||||
path="res://.godot/imported/blue.png-2ebebcb60a2786b51bf8c57bf6c35d93.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/blue.png"
|
||||
dest_files=["res://.godot/imported/blue.png-2ebebcb60a2786b51bf8c57bf6c35d93.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
|
||||
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dmry88lccca6v"
|
||||
path="res://.godot/imported/generic-bam-placeholder.gltf-9c6b218e010af71bbfc5e7c09f9a3001.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/generic-bam-placeholder.gltf"
|
||||
dest_files=["res://.godot/imported/generic-bam-placeholder.gltf-9c6b218e010af71bbfc5e7c09f9a3001.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={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
|
After Width: | Height: | Size: 100 B |
@@ -0,0 +1,38 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://en0thvrt6r6o"
|
||||
path.s3tc="res://.godot/imported/generic-bam-placeholder_0.png-4b26c694cab47cc035250c044ea2f819.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "c16cd153f9c4e58f92155c7fdbacab46"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/generic-bam-placeholder_0.png"
|
||||
dest_files=["res://.godot/imported/generic-bam-placeholder_0.png-4b26c694cab47cc035250c044ea2f819.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
|
||||
|
After Width: | Height: | Size: 100 B |
@@ -0,0 +1,38 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://daj38bahjfuwa"
|
||||
path.s3tc="res://.godot/imported/generic-bam-placeholder_1.png-a28949c8b47cd079d7024f9873bd59ec.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "ef862aea6838e1d435e71bdbfb00179b"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/generic-bam-placeholder_1.png"
|
||||
dest_files=["res://.godot/imported/generic-bam-placeholder_1.png-a28949c8b47cd079d7024f9873bd59ec.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
|
||||
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://k6f3fdlnbmjp"
|
||||
path="res://.godot/imported/generic-player-placeholder-red.gltf-ea859f06b8e003c98de2a38069feee97.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/generic-player-placeholder-red.gltf"
|
||||
dest_files=["res://.godot/imported/generic-player-placeholder-red.gltf-ea859f06b8e003c98de2a38069feee97.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={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
|
After Width: | Height: | Size: 100 B |
@@ -0,0 +1,38 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cpeerw3suw6mu"
|
||||
path.s3tc="res://.godot/imported/generic-player-placeholder-red_0.png-2c10651b9fcf9a6312237a1dc764d53d.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "ab6be8d52f7b2c547d41a85e90c891ca"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/generic-player-placeholder-red_0.png"
|
||||
dest_files=["res://.godot/imported/generic-player-placeholder-red_0.png-2c10651b9fcf9a6312237a1dc764d53d.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
|
||||
|
After Width: | Height: | Size: 100 B |
@@ -0,0 +1,38 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://vjlacypkdltq"
|
||||
path.s3tc="res://.godot/imported/generic-player-placeholder-red_1.png-dee3ab7ddc7582b49a9fd5adc139df00.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "ef862aea6838e1d435e71bdbfb00179b"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/generic-player-placeholder-red_1.png"
|
||||
dest_files=["res://.godot/imported/generic-player-placeholder-red_1.png-dee3ab7ddc7582b49a9fd5adc139df00.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
|
||||
@@ -0,0 +1,37 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://dy6gkeak06s17"
|
||||
path="res://.godot/imported/generic-player-placeholder.gltf-d04d5db451019c4676ca4f90b38fb57a.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/generic-player-placeholder.gltf"
|
||||
dest_files=["res://.godot/imported/generic-player-placeholder.gltf-d04d5db451019c4676ca4f90b38fb57a.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={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
||||
|
After Width: | Height: | Size: 100 B |
@@ -0,0 +1,38 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://o47cpbwqjsjs"
|
||||
path.s3tc="res://.godot/imported/generic-player-placeholder_0.png-1bbbfa59d7787bfd0a359a8b57d9b3b8.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "952985ffaa2c5afc37983b4f7510c250"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/generic-player-placeholder_0.png"
|
||||
dest_files=["res://.godot/imported/generic-player-placeholder_0.png-1bbbfa59d7787bfd0a359a8b57d9b3b8.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
|
||||
|
After Width: | Height: | Size: 100 B |
@@ -0,0 +1,38 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://voq5cycx1mal"
|
||||
path.s3tc="res://.godot/imported/generic-player-placeholder_1.png-28f369353b1e252b6560224aa6109668.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "ef862aea6838e1d435e71bdbfb00179b"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/generic-player-placeholder_1.png"
|
||||
dest_files=["res://.godot/imported/generic-player-placeholder_1.png-28f369353b1e252b6560224aa6109668.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
|
||||
|
After Width: | Height: | Size: 543 B |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bq1dptt2cbowv"
|
||||
path="res://.godot/imported/neutral.png-80876cec7814f9bf29f7275049231f7f.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/neutral.png"
|
||||
dest_files=["res://.godot/imported/neutral.png-80876cec7814f9bf29f7275049231f7f.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
|
||||
|
After Width: | Height: | Size: 95 B |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c2njhdyxocn3m"
|
||||
path="res://.godot/imported/notblue.png-11c566d53917b3b6ae77697a670d1436.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/notblue.png"
|
||||
dest_files=["res://.godot/imported/notblue.png-11c566d53917b3b6ae77697a670d1436.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
|
||||
|
After Width: | Height: | Size: 95 B |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ds63oxmg2i260"
|
||||
path="res://.godot/imported/red.png-ff7cef4bec9b12c12344685a7dc6e028.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/red.png"
|
||||
dest_files=["res://.godot/imported/red.png-ff7cef4bec9b12c12344685a7dc6e028.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
|
||||
|
After Width: | Height: | Size: 95 B |
@@ -0,0 +1,34 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bninyy5txs3yf"
|
||||
path="res://.godot/imported/white.png-251d22fbf66643dc5f64509f2be910f4.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://models/white.png"
|
||||
dest_files=["res://.godot/imported/white.png-251d22fbf66643dc5f64509f2be910f4.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
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/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
|
||||
@@ -11,9 +11,89 @@ config_version=5
|
||||
[application]
|
||||
|
||||
config/name="Instructions Clear"
|
||||
config/features=PackedStringArray("4.3", "Mobile")
|
||||
run/main_scene="res://scenes/empty.tscn"
|
||||
config/features=PackedStringArray("4.4", "Mobile")
|
||||
run/max_fps=120
|
||||
boot_splash/show_image=false
|
||||
config/icon="res://icon.svg"
|
||||
run/size/borderless=false
|
||||
run/size/viewport_height=720
|
||||
run/size/viewport_width=1280
|
||||
|
||||
[autoload]
|
||||
|
||||
MultiplayerManager="*res://scripts/multiplayer/multiplayer_manager.gd"
|
||||
Main="*res://scripts/main.gd"
|
||||
|
||||
[display]
|
||||
|
||||
window/size/viewport_width=1280
|
||||
window/size/viewport_height=720
|
||||
window/vsync/vsync_mode=0
|
||||
|
||||
[input]
|
||||
|
||||
move_forward={
|
||||
"deadzone": 0.5,
|
||||
"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":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
|
||||
, 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":4194320,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_right={
|
||||
"deadzone": 0.5,
|
||||
"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":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
|
||||
, 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":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_back={
|
||||
"deadzone": 0.5,
|
||||
"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)
|
||||
, 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":4194322,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_left={
|
||||
"deadzone": 0.5,
|
||||
"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":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
|
||||
, 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":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
mouse_capture={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(163, 13),"global_position":Vector2(172, 59),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
mouse_release={
|
||||
"deadzone": 0.5,
|
||||
"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":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
walk={
|
||||
"deadzone": 0.5,
|
||||
"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":4194325,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
primary_interact={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(138, 4),"global_position":Vector2(147, 50),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
secondary_interact={
|
||||
"deadzone": 0.5,
|
||||
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(159, 23),"global_position":Vector2(168, 69),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[rendering]
|
||||
|
||||
renderer/rendering_method="mobile"
|
||||
rendering_device/fallback_to_vulkan=false
|
||||
rendering_device/fallback_to_d3d12=false
|
||||
lights_and_shadows/directional_shadow/size.mobile=4096
|
||||
lights_and_shadows/directional_shadow/soft_shadow_filter_quality=3
|
||||
lights_and_shadows/directional_shadow/soft_shadow_filter_quality.mobile=3
|
||||
lights_and_shadows/positional_shadow/soft_shadow_filter_quality=3
|
||||
lights_and_shadows/positional_shadow/soft_shadow_filter_quality.mobile=3
|
||||
anti_aliasing/quality/msaa_2d=1
|
||||
anti_aliasing/quality/msaa_3d=1
|
||||
environment/defaults/default_clear_color=Color(0, 0, 0, 1)
|
||||
anti_aliasing/quality/use_debanding=true
|
||||
lights_and_shadows/positional_shadow/atlas_size.mobile=4096
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
[gd_scene load_steps=21 format=3 uid="uid://dvqj0souma3mh"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/runner.gd" id="1_hjhpa"]
|
||||
[ext_resource type="Script" path="res://scripts/multiplayer/input.gd" id="2_ktv5u"]
|
||||
[ext_resource type="Material" uid="uid://diptcpjxid3cm" path="res://materials/chaser.tres" id="3_tvy4p"]
|
||||
[ext_resource type="Script" path="res://scripts/states/state_machine.gd" id="4_ttxqy"]
|
||||
[ext_resource type="Script" path="res://scripts/states/idle.gd" id="5_vepvv"]
|
||||
[ext_resource type="Script" path="res://scripts/states/run.gd" id="6_fllo7"]
|
||||
[ext_resource type="Script" path="res://scripts/states/fall.gd" id="7_0e04j"]
|
||||
[ext_resource type="Script" path="res://scripts/states/dead.gd" id="9_8je4a"]
|
||||
[ext_resource type="Script" path="res://scripts/states/attack.gd" id="9_nqccg"]
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_ukf45"]
|
||||
properties/0/path = NodePath(".:player_id")
|
||||
properties/0/spawn = true
|
||||
properties/0/replication_mode = 2
|
||||
properties/1/path = NodePath(".:server_position")
|
||||
properties/1/spawn = true
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath(".:server_rotation")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
properties/3/path = NodePath(".:dead")
|
||||
properties/3/spawn = true
|
||||
properties/3/replication_mode = 1
|
||||
properties/4/path = NodePath("RotationBase/AttackHitbox:visible")
|
||||
properties/4/spawn = true
|
||||
properties/4/replication_mode = 1
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_1agtp"]
|
||||
properties/0/path = NodePath("Input:direction")
|
||||
properties/0/spawn = true
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath("Input:walk")
|
||||
properties/1/spawn = true
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("Input:primary_interact")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
properties/3/path = NodePath("Input:secondary_interact")
|
||||
properties/3/spawn = true
|
||||
properties/3/replication_mode = 1
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_j6tb3"]
|
||||
radius = 0.3
|
||||
height = 1.8
|
||||
|
||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_di3a0"]
|
||||
radius = 0.3
|
||||
height = 1.8
|
||||
|
||||
[sub_resource type="PrismMesh" id="PrismMesh_fcj1v"]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_tudvv"]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_1gltg"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_rsamr"]
|
||||
size = Vector3(1, 1.75, 1.5)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_phaav"]
|
||||
size = Vector3(1, 1.75, 1.5)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ssauw"]
|
||||
albedo_color = Color(1, 0, 0, 1)
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_wsx1k"]
|
||||
|
||||
[node name="Chaser" type="CharacterBody3D" node_paths=PackedStringArray("state_machine")]
|
||||
script = ExtResource("1_hjhpa")
|
||||
state_machine = NodePath("StateMachine")
|
||||
|
||||
[node name="Sync" type="MultiplayerSynchronizer" parent="."]
|
||||
replication_config = SubResource("SceneReplicationConfig_ukf45")
|
||||
|
||||
[node name="Input" type="MultiplayerSynchronizer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
replication_config = SubResource("SceneReplicationConfig_1agtp")
|
||||
script = ExtResource("2_ktv5u")
|
||||
|
||||
[node name="CameraPivot" type="Node3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
||||
|
||||
[node name="Collider" type="CollisionShape3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
shape = SubResource("CapsuleShape3D_j6tb3")
|
||||
|
||||
[node name="RotationBase" type="Node3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="Skin" type="Node3D" parent="RotationBase"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="MainBody" type="MeshInstance3D" parent="RotationBase/Skin"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
mesh = SubResource("CapsuleMesh_di3a0")
|
||||
skeleton = NodePath("../../..")
|
||||
surface_material_override/0 = ExtResource("3_tvy4p")
|
||||
|
||||
[node name="Beak" type="MeshInstance3D" parent="RotationBase/Skin/MainBody"]
|
||||
transform = Transform3D(0.35, 0, 0, 0, -0.105655, 0.0906308, 0, -0.226577, -0.0422618, 0, 0.45, -0.3)
|
||||
mesh = SubResource("PrismMesh_fcj1v")
|
||||
|
||||
[node name="RightEye" type="MeshInstance3D" parent="RotationBase/Skin/MainBody"]
|
||||
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0.1, 0.6, -0.25)
|
||||
mesh = SubResource("SphereMesh_tudvv")
|
||||
|
||||
[node name="LeftEye" type="MeshInstance3D" parent="RotationBase/Skin/MainBody"]
|
||||
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, -0.1, 0.6, -0.25)
|
||||
mesh = SubResource("SphereMesh_1gltg")
|
||||
|
||||
[node name="AttackHitbox" type="Area3D" parent="RotationBase"]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -0.75)
|
||||
visible = false
|
||||
monitorable = false
|
||||
|
||||
[node name="AttackCollider" type="CollisionShape3D" parent="RotationBase/AttackHitbox"]
|
||||
shape = SubResource("BoxShape3D_rsamr")
|
||||
|
||||
[node name="AttackVisualBox" type="MeshInstance3D" parent="RotationBase/AttackHitbox"]
|
||||
transparency = 0.8
|
||||
mesh = SubResource("BoxMesh_phaav")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_ssauw")
|
||||
|
||||
[node name="AttackTimer" type="Timer" parent="RotationBase/AttackHitbox"]
|
||||
unique_name_in_owner = true
|
||||
process_callback = 0
|
||||
wait_time = 0.35
|
||||
one_shot = true
|
||||
|
||||
[node name="AttackCooldown" type="Timer" parent="RotationBase/AttackHitbox"]
|
||||
unique_name_in_owner = true
|
||||
process_callback = 0
|
||||
wait_time = 2.0
|
||||
one_shot = true
|
||||
autostart = true
|
||||
|
||||
[node name="FloatingCamera" type="Node" parent="."]
|
||||
|
||||
[node name="CameraPlatform" type="Node3D" parent="FloatingCamera"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="CameraSpringArm" type="SpringArm3D" parent="FloatingCamera/CameraPlatform"]
|
||||
shape = SubResource("SphereShape3D_wsx1k")
|
||||
spring_length = 3.5
|
||||
|
||||
[node name="Camera" type="Camera3D" parent="FloatingCamera/CameraPlatform/CameraSpringArm"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("current_state")]
|
||||
script = ExtResource("4_ttxqy")
|
||||
current_state = NodePath("Idle")
|
||||
|
||||
[node name="Idle" type="Node" parent="StateMachine"]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("5_vepvv")
|
||||
|
||||
[node name="Run" type="Node" parent="StateMachine"]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("6_fllo7")
|
||||
|
||||
[node name="Fall" type="Node" parent="StateMachine"]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("7_0e04j")
|
||||
|
||||
[node name="Dead" type="Node" parent="StateMachine"]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("9_8je4a")
|
||||
|
||||
[node name="Attack" type="Node" parent="StateMachine"]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("9_nqccg")
|
||||
|
||||
[connection signal="delta_synchronized" from="Sync" to="." method="_on_sync_delta_synchronized"]
|
||||
[connection signal="body_entered" from="RotationBase/AttackHitbox" to="StateMachine/Attack" method="_on_attack_body_entered"]
|
||||
[connection signal="body_exited" from="RotationBase/AttackHitbox" to="StateMachine/Attack" method="_on_attack_body_exited"]
|
||||
@@ -0,0 +1,3 @@
|
||||
[gd_scene format=3 uid="uid://b6nq7wjyrroi0"]
|
||||
|
||||
[node name="EmptyNode" type="Node"]
|
||||
@@ -0,0 +1,154 @@
|
||||
[gd_scene load_steps=18 format=3 uid="uid://cw0ho53ruh87m"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_e1dyx"]
|
||||
size = Vector3(16, 0.1, 20)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_xfekw"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_cnq3u"]
|
||||
size = Vector3(16, 0.1, 16)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_dwa2s"]
|
||||
size = Vector3(4, 0.1, 4)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_lt54m"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_fgmeq"]
|
||||
size = Vector3(9.479, 0.1, 4)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_thq07"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_xn166"]
|
||||
size = Vector3(16, 0.1, 20)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_intbb"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_e0hgo"]
|
||||
size = Vector3(1, 10, 20)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_qljsj"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_0reu4"]
|
||||
size = Vector3(1, 10, 20)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_8hngc"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_yaygu"]
|
||||
size = Vector3(16, 10, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_hwi1p"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_ktywj"]
|
||||
size = Vector3(16, 10, 1)
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_lm401"]
|
||||
|
||||
[node name="House" type="Node3D"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0137916, -4.76837e-07, 0.0149183)
|
||||
|
||||
[node name="FirstFloor" type="StaticBody3D" parent="."]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="FirstFloor"]
|
||||
shape = SubResource("BoxShape3D_e1dyx")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="FirstFloor"]
|
||||
transform = Transform3D(16, 0, 0, 0, 0.1, 0, 0, 0, 20, 0, 0, 0)
|
||||
mesh = SubResource("BoxMesh_xfekw")
|
||||
|
||||
[node name="SecondFloor" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="SecondFloor"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -2)
|
||||
shape = SubResource("BoxShape3D_cnq3u")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="SecondFloor"]
|
||||
transform = Transform3D(16, 0, 0, 0, 0.1, 0, 0, 0, 16, 0, 0, -2)
|
||||
mesh = SubResource("BoxMesh_xfekw")
|
||||
|
||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="SecondFloor"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 8)
|
||||
shape = SubResource("BoxShape3D_dwa2s")
|
||||
|
||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="SecondFloor"]
|
||||
transform = Transform3D(4, 0, 0, 0, 0.1, 0, 0, 0, 4, 6, 0, 8)
|
||||
mesh = SubResource("BoxMesh_lt54m")
|
||||
|
||||
[node name="Stairs" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Stairs"]
|
||||
transform = Transform3D(0.849893, -0.526956, 0, 0.526956, 0.849893, 0, 0, 0, 1, 0, 2.51, 0)
|
||||
shape = SubResource("BoxShape3D_fgmeq")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Stairs"]
|
||||
transform = Transform3D(8.05613, -0.0526956, 0, 4.99501, 0.0849893, 0, 0, 0, 4, 0, 2.51, 0)
|
||||
mesh = SubResource("BoxMesh_thq07")
|
||||
|
||||
[node name="Ceiling" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, 0)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Ceiling"]
|
||||
shape = SubResource("BoxShape3D_xn166")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Ceiling"]
|
||||
transform = Transform3D(16, 0, 0, 0, 0.1, 0, 0, 0, 20, 0, 0, 0)
|
||||
mesh = SubResource("BoxMesh_intbb")
|
||||
|
||||
[node name="Wall1" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 0, 0)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall1"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
|
||||
shape = SubResource("BoxShape3D_e0hgo")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall1"]
|
||||
transform = Transform3D(1, 0, 0, 0, 10, 0, 0, 0, 20, 0, 5, 0)
|
||||
mesh = SubResource("BoxMesh_qljsj")
|
||||
|
||||
[node name="Wall2" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8, 0, 0)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
|
||||
shape = SubResource("BoxShape3D_0reu4")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 10, 0, 0, 0, 20, 0, 5, 0)
|
||||
mesh = SubResource("BoxMesh_8hngc")
|
||||
|
||||
[node name="Wall3" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -10)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall3"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
|
||||
shape = SubResource("BoxShape3D_yaygu")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall3"]
|
||||
transform = Transform3D(16, 0, 0, 0, 10, 0, 0, 0, 1, 0, 5, 0)
|
||||
mesh = SubResource("BoxMesh_hwi1p")
|
||||
|
||||
[node name="Wall4" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Wall4"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0)
|
||||
shape = SubResource("BoxShape3D_ktywj")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Wall4"]
|
||||
transform = Transform3D(16, 0, 0, 0, 10, 0, 0, 0, 1, 0, 5, 0)
|
||||
mesh = SubResource("BoxMesh_lm401")
|
||||
|
||||
[node name="Lights" type="Node3D" parent="."]
|
||||
|
||||
[node name="FirstFloorLight" type="OmniLight3D" parent="Lights"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4, 0)
|
||||
light_energy = 0.5
|
||||
shadow_enabled = true
|
||||
omni_range = 40.0
|
||||
|
||||
[node name="SecondFloorLight" type="OmniLight3D" parent="Lights"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9, 0)
|
||||
light_energy = 0.5
|
||||
shadow_enabled = true
|
||||
omni_range = 40.0
|
||||
@@ -0,0 +1,101 @@
|
||||
[gd_scene load_steps=10 format=3 uid="uid://d22gcvp7p2sfr"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/in_game.gd" id="1_0lma2"]
|
||||
[ext_resource type="PlaneMesh" uid="uid://dwpvym2kc4gd8" path="res://meshes/ground.tres" id="1_7j0qh"]
|
||||
[ext_resource type="Material" uid="uid://chp3rogcgumau" path="res://materials/ground.tres" id="2_f8uto"]
|
||||
|
||||
[sub_resource type="Environment" id="Environment_2c67a"]
|
||||
background_mode = 1
|
||||
ambient_light_source = 2
|
||||
ambient_light_color = Color(1, 1, 1, 1)
|
||||
ambient_light_energy = 0.15
|
||||
tonemap_mode = 3
|
||||
sdfgi_read_sky_light = false
|
||||
glow_enabled = true
|
||||
glow_normalized = true
|
||||
volumetric_fog_enabled = true
|
||||
volumetric_fog_albedo = Color(0.381703, 0.381703, 0.381703, 1)
|
||||
volumetric_fog_emission = Color(0.314009, 2.89988e-06, 1.52815e-06, 1)
|
||||
volumetric_fog_emission_energy = 0.25
|
||||
|
||||
[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_1l61b"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_kcty4"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_6koow"]
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_y3ciy"]
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_2wvq0"]
|
||||
|
||||
[node name="InGame" type="Node3D"]
|
||||
script = ExtResource("1_0lma2")
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource("Environment_2c67a")
|
||||
|
||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 0.258819, 0.965926, 0, -0.965926, 0.258819, 0, 10.0494, 0)
|
||||
|
||||
[node name="ChaserSpawner" type="MultiplayerSpawner" parent="."]
|
||||
_spawnable_scenes = PackedStringArray("res://scenes/chaser.tscn")
|
||||
spawn_path = NodePath("../Chasers")
|
||||
|
||||
[node name="RunnerSpawner" type="MultiplayerSpawner" parent="."]
|
||||
_spawnable_scenes = PackedStringArray("res://scenes/runner.tscn")
|
||||
spawn_path = NodePath("../Runners")
|
||||
|
||||
[node name="Ground" type="StaticBody3D" parent="."]
|
||||
|
||||
[node name="GroundCollider" type="CollisionShape3D" parent="Ground"]
|
||||
shape = SubResource("WorldBoundaryShape3D_1l61b")
|
||||
|
||||
[node name="GroundMesh" type="MeshInstance3D" parent="Ground"]
|
||||
mesh = ExtResource("1_7j0qh")
|
||||
surface_material_override/0 = ExtResource("2_f8uto")
|
||||
|
||||
[node name="Chasers" type="Node3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="Runners" type="Node3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="StatsOverlay" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="StatsContainer" type="Control" parent="StatsOverlay"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="StatsLabel" type="RichTextLabel" parent="StatsOverlay/StatsContainer"]
|
||||
unique_name_in_owner = true
|
||||
layout_mode = 0
|
||||
offset_right = 200.0
|
||||
offset_bottom = 50.0
|
||||
|
||||
[node name="PingTimer" type="Timer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
wait_time = 0.5
|
||||
autostart = true
|
||||
|
||||
[node name="StaticBody3D" type="StaticBody3D" parent="."]
|
||||
transform = Transform3D(0.96321, 0, 0.268752, 0, 1, 0, -0.268752, 0, 0.96321, 3, 0.5, 0)
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D"]
|
||||
mesh = SubResource("BoxMesh_kcty4")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D"]
|
||||
shape = SubResource("BoxShape3D_6koow")
|
||||
|
||||
[node name="MainObjective" type="StaticBody3D" parent="."]
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="MainObjective"]
|
||||
shape = SubResource("BoxShape3D_y3ciy")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="MainObjective"]
|
||||
mesh = SubResource("BoxMesh_2wvq0")
|
||||
|
||||
[connection signal="timeout" from="PingTimer" to="." method="_on_ping_timer_timeout"]
|
||||
@@ -0,0 +1,85 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://qiew7wf7r8c4"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/main_menu.gd" id="1_ivhyr"]
|
||||
|
||||
[node name="MainMenu" type="Control"]
|
||||
layout_mode = 3
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
script = ExtResource("1_ivhyr")
|
||||
|
||||
[node name="Panel" type="Panel" parent="."]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="Background" type="ColorRect" parent="Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
color = Color(0.156863, 0.156863, 0.305882, 1)
|
||||
|
||||
[node name="Center" type="CenterContainer" parent="Panel"]
|
||||
layout_mode = 1
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="VerticalMenu" type="VBoxContainer" parent="Panel/Center"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="IpLabel" type="RichTextLabel" parent="Panel/Center/VerticalMenu"]
|
||||
custom_minimum_size = Vector2(0, 25)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
bbcode_enabled = true
|
||||
text = "[center]Server Address[/center]"
|
||||
scroll_active = false
|
||||
|
||||
[node name="IpTextBox" type="TextEdit" parent="Panel/Center/VerticalMenu"]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(0, 40)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
placeholder_text = "localhost (default)"
|
||||
|
||||
[node name="JoinButtonSpacer" type="Control" parent="Panel/Center/VerticalMenu"]
|
||||
custom_minimum_size = Vector2(0, 15)
|
||||
layout_mode = 2
|
||||
|
||||
[node name="JoinLabel" type="RichTextLabel" parent="Panel/Center/VerticalMenu"]
|
||||
custom_minimum_size = Vector2(0, 25)
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 4
|
||||
bbcode_enabled = true
|
||||
text = "[center]Join as[/center]"
|
||||
scroll_active = false
|
||||
|
||||
[node name="HBoxContainer" type="HBoxContainer" parent="Panel/Center/VerticalMenu"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="JoinAsRunnerButton" type="Button" parent="Panel/Center/VerticalMenu/HBoxContainer"]
|
||||
custom_minimum_size = Vector2(150, 40)
|
||||
layout_mode = 2
|
||||
text = "Runner"
|
||||
text_overrun_behavior = 3
|
||||
|
||||
[node name="JoinAsChaserButton" type="Button" parent="Panel/Center/VerticalMenu/HBoxContainer"]
|
||||
custom_minimum_size = Vector2(150, 40)
|
||||
layout_mode = 2
|
||||
text = "Chaser"
|
||||
text_overrun_behavior = 3
|
||||
|
||||
[connection signal="pressed" from="Panel/Center/VerticalMenu/HBoxContainer/JoinAsRunnerButton" to="." method="_on_join_as_runner_button_pressed"]
|
||||
[connection signal="pressed" from="Panel/Center/VerticalMenu/HBoxContainer/JoinAsChaserButton" to="." method="_on_join_as_chaser_button_pressed"]
|
||||
@@ -0,0 +1,138 @@
|
||||
[gd_scene load_steps=18 format=3 uid="uid://8esyynmieyog"]
|
||||
|
||||
[ext_resource type="Script" path="res://scripts/runner.gd" id="1_d63rt"]
|
||||
[ext_resource type="Script" path="res://scripts/multiplayer/input.gd" id="2_xmliy"]
|
||||
[ext_resource type="Material" uid="uid://ccrb46njti2ke" path="res://materials/runner.tres" id="3_6c0ro"]
|
||||
[ext_resource type="Script" path="res://scripts/states/state_machine.gd" id="4_40cmc"]
|
||||
[ext_resource type="Script" path="res://scripts/states/idle.gd" id="5_hq6tn"]
|
||||
[ext_resource type="Script" path="res://scripts/states/run.gd" id="6_1teax"]
|
||||
[ext_resource type="Script" path="res://scripts/states/fall.gd" id="7_jfat4"]
|
||||
[ext_resource type="Script" path="res://scripts/states/walk.gd" id="8_phh70"]
|
||||
[ext_resource type="Script" path="res://scripts/states/dead.gd" id="9_bw4yb"]
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_ukf45"]
|
||||
properties/0/path = NodePath(".:player_id")
|
||||
properties/0/spawn = true
|
||||
properties/0/replication_mode = 2
|
||||
properties/1/path = NodePath(".:server_position")
|
||||
properties/1/spawn = true
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath(".:server_rotation")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
properties/3/path = NodePath(".:dead")
|
||||
properties/3/spawn = true
|
||||
properties/3/replication_mode = 1
|
||||
|
||||
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_1agtp"]
|
||||
properties/0/path = NodePath("Input:direction")
|
||||
properties/0/spawn = true
|
||||
properties/0/replication_mode = 1
|
||||
properties/1/path = NodePath("Input:walk")
|
||||
properties/1/spawn = true
|
||||
properties/1/replication_mode = 1
|
||||
properties/2/path = NodePath("Input:primary_interact")
|
||||
properties/2/spawn = true
|
||||
properties/2/replication_mode = 1
|
||||
properties/3/path = NodePath("Input:secondary_interact")
|
||||
properties/3/spawn = true
|
||||
properties/3/replication_mode = 1
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_j6tb3"]
|
||||
radius = 0.3
|
||||
height = 1.8
|
||||
|
||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_di3a0"]
|
||||
radius = 0.3
|
||||
height = 1.8
|
||||
|
||||
[sub_resource type="PrismMesh" id="PrismMesh_fcj1v"]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_tudvv"]
|
||||
|
||||
[sub_resource type="SphereMesh" id="SphereMesh_1gltg"]
|
||||
|
||||
[sub_resource type="SphereShape3D" id="SphereShape3D_wsx1k"]
|
||||
|
||||
[node name="Runner" type="CharacterBody3D" node_paths=PackedStringArray("state_machine")]
|
||||
script = ExtResource("1_d63rt")
|
||||
state_machine = NodePath("StateMachine")
|
||||
|
||||
[node name="Sync" type="MultiplayerSynchronizer" parent="."]
|
||||
replication_config = SubResource("SceneReplicationConfig_ukf45")
|
||||
|
||||
[node name="Input" type="MultiplayerSynchronizer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
replication_config = SubResource("SceneReplicationConfig_1agtp")
|
||||
script = ExtResource("2_xmliy")
|
||||
|
||||
[node name="CameraPivot" type="Node3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0)
|
||||
|
||||
[node name="Collider" type="CollisionShape3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
shape = SubResource("CapsuleShape3D_j6tb3")
|
||||
|
||||
[node name="RotationBase" type="Node3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="Skin" type="Node3D" parent="RotationBase"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="MainBody" type="MeshInstance3D" parent="RotationBase/Skin"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
|
||||
mesh = SubResource("CapsuleMesh_di3a0")
|
||||
skeleton = NodePath("../../..")
|
||||
surface_material_override/0 = ExtResource("3_6c0ro")
|
||||
|
||||
[node name="Beak" type="MeshInstance3D" parent="RotationBase/Skin/MainBody"]
|
||||
transform = Transform3D(0.35, 0, 0, 0, -0.105655, 0.0906308, 0, -0.226577, -0.0422618, 0, 0.45, -0.3)
|
||||
mesh = SubResource("PrismMesh_fcj1v")
|
||||
|
||||
[node name="RightEye" type="MeshInstance3D" parent="RotationBase/Skin/MainBody"]
|
||||
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, 0.1, 0.6, -0.25)
|
||||
mesh = SubResource("SphereMesh_tudvv")
|
||||
|
||||
[node name="LeftEye" type="MeshInstance3D" parent="RotationBase/Skin/MainBody"]
|
||||
transform = Transform3D(0.1, 0, 0, 0, 0.1, 0, 0, 0, 0.1, -0.1, 0.6, -0.25)
|
||||
mesh = SubResource("SphereMesh_1gltg")
|
||||
|
||||
[node name="FloatingCamera" type="Node" parent="."]
|
||||
|
||||
[node name="CameraPlatform" type="Node3D" parent="FloatingCamera"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="CameraSpringArm" type="SpringArm3D" parent="FloatingCamera/CameraPlatform"]
|
||||
shape = SubResource("SphereShape3D_wsx1k")
|
||||
spring_length = 3.5
|
||||
|
||||
[node name="Camera" type="Camera3D" parent="FloatingCamera/CameraPlatform/CameraSpringArm"]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("current_state")]
|
||||
script = ExtResource("4_40cmc")
|
||||
current_state = NodePath("Idle")
|
||||
|
||||
[node name="Idle" type="Node" parent="StateMachine"]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("5_hq6tn")
|
||||
|
||||
[node name="Run" type="Node" parent="StateMachine"]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("6_1teax")
|
||||
|
||||
[node name="Fall" type="Node" parent="StateMachine"]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("7_jfat4")
|
||||
|
||||
[node name="Walk" type="Node" parent="StateMachine"]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("8_phh70")
|
||||
|
||||
[node name="Dead" type="Node" parent="StateMachine"]
|
||||
unique_name_in_owner = true
|
||||
script = ExtResource("9_bw4yb")
|
||||
|
||||
[connection signal="delta_synchronized" from="Sync" to="." method="_on_sync_delta_synchronized"]
|
||||
@@ -0,0 +1,55 @@
|
||||
extends Node3D
|
||||
|
||||
const statsTemplate := "FPS: %d\nPing: %d ms"
|
||||
|
||||
var runner_scene := preload("res://scenes/runner.tscn")
|
||||
var chaser_scene := preload("res://scenes/chaser.tscn")
|
||||
var _ping := 0.0
|
||||
@onready var _chasers_node: Node3D = %Chasers
|
||||
@onready var _runners_node: Node3D = %Runners
|
||||
|
||||
func spawn_player(player_id: int, runner: bool) -> void:
|
||||
if not multiplayer.is_server(): return
|
||||
|
||||
var player = runner_scene.instantiate() if runner else chaser_scene.instantiate()
|
||||
player.player_id = player_id
|
||||
player.name = str(player_id)
|
||||
|
||||
if runner:
|
||||
_runners_node.add_child(player)
|
||||
else:
|
||||
_chasers_node.add_child(player)
|
||||
|
||||
func despawn_player(player_id: int) -> void:
|
||||
if not multiplayer.is_server(): return
|
||||
|
||||
var player_id_str := str(player_id)
|
||||
for runner_or_chaser in _runners_node.get_children() + _chasers_node.get_children():
|
||||
if runner_or_chaser.name == player_id_str:
|
||||
runner_or_chaser.queue_free()
|
||||
|
||||
func _process(_delta: float) -> void:
|
||||
if DisplayServer.get_name() == "headless": return
|
||||
|
||||
%StatsLabel.text = statsTemplate % [
|
||||
Engine.get_frames_per_second(),
|
||||
_ping,
|
||||
]
|
||||
|
||||
func _get_timestamp() -> int:
|
||||
return floor(Time.get_unix_time_from_system() * 1000)
|
||||
|
||||
func _on_ping_timer_timeout() -> void:
|
||||
if multiplayer.is_server():
|
||||
%PingTimer.stop()
|
||||
return
|
||||
|
||||
_ping_call.rpc_id(1, _get_timestamp())
|
||||
|
||||
@rpc("any_peer", "call_remote", "unreliable", 99)
|
||||
func _ping_call(timestamp: int) -> void:
|
||||
if multiplayer.is_server():
|
||||
_ping_call.rpc_id(multiplayer.get_remote_sender_id(), timestamp)
|
||||
return
|
||||
|
||||
_ping = _get_timestamp() - timestamp
|
||||
@@ -0,0 +1 @@
|
||||
uid://c3ks2lbj65erq
|
||||
@@ -0,0 +1,10 @@
|
||||
extends Node
|
||||
|
||||
var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity")
|
||||
var gravity_vector: Vector3 = ProjectSettings.get_setting("physics/3d/default_gravity_vector")
|
||||
var physics_tickrate = Engine.get_physics_ticks_per_second()
|
||||
var terminal_velocity: float = 150.0
|
||||
var gravity_velocity: Vector3 = (gravity_vector * gravity) / (physics_tickrate as float)
|
||||
|
||||
func is_server_or_predicting(player_id: int, client_prediction: bool = false):
|
||||
return multiplayer.is_server() or (multiplayer.get_unique_id() == player_id and client_prediction)
|
||||
@@ -0,0 +1 @@
|
||||
uid://b3vuso52nyr8p
|
||||
@@ -0,0 +1,9 @@
|
||||
extends Control
|
||||
|
||||
func _on_join_as_runner_button_pressed() -> void:
|
||||
MultiplayerManager.connect_to_ip(true, %IpTextBox.text)
|
||||
get_tree().change_scene_to_file("res://scenes/in_game.tscn")
|
||||
|
||||
func _on_join_as_chaser_button_pressed() -> void:
|
||||
MultiplayerManager.connect_to_ip(false, %IpTextBox.text)
|
||||
get_tree().change_scene_to_file("res://scenes/in_game.tscn")
|
||||
@@ -0,0 +1 @@
|
||||
uid://dhgarroknbyh0
|
||||
@@ -0,0 +1,28 @@
|
||||
extends MultiplayerSynchronizer
|
||||
|
||||
@export var direction: Vector2 = Vector2.ZERO
|
||||
@export var walk: bool = false
|
||||
@export var primary_interact: bool = false
|
||||
@export var secondary_interact: bool = false
|
||||
|
||||
@onready var _camera_pivot: Node3D = %CameraPivot
|
||||
|
||||
func _ready() -> void:
|
||||
if multiplayer.is_server() or get_multiplayer_authority() != multiplayer.get_unique_id():
|
||||
set_process(false)
|
||||
set_physics_process(false)
|
||||
|
||||
func _physics_process(_delta: float) -> void:
|
||||
if get_multiplayer_authority() != multiplayer.get_unique_id(): return
|
||||
|
||||
var directional_input := Input.get_vector("move_right", "move_left", "move_forward", "move_back")
|
||||
var camera_adjusted: Vector3 = (directional_input.x * _camera_pivot.global_basis.z) + (directional_input.y * _camera_pivot.global_basis.x)
|
||||
direction = Vector2(camera_adjusted.x, camera_adjusted.z).rotated(PI / 2.0).normalized()
|
||||
walk = Input.is_action_pressed("walk")
|
||||
|
||||
func _input(_event: InputEvent) -> void:
|
||||
if get_multiplayer_authority() != multiplayer.get_unique_id(): return
|
||||
if Input.get_mouse_mode() != Input.MOUSE_MODE_CAPTURED: return
|
||||
|
||||
primary_interact = Input.is_action_pressed("primary_interact")
|
||||
secondary_interact = Input.is_action_pressed("secondary_interact")
|
||||
@@ -0,0 +1 @@
|
||||
uid://tt4s3jkcyqt
|
||||
@@ -0,0 +1,70 @@
|
||||
extends Node
|
||||
|
||||
const PORT = 1280
|
||||
const IP_ADDRESS = "127.0.0.1"
|
||||
const MAX_CLIENTS = 5
|
||||
|
||||
var in_game_scene := preload("res://scenes/in_game.tscn")
|
||||
var main_menu_scene := preload("res://scenes/main_menu.tscn")
|
||||
var runner_client_selection := true
|
||||
var runner_dict := {}
|
||||
|
||||
func _ready() -> void:
|
||||
set_process(false)
|
||||
set_physics_process(false)
|
||||
|
||||
if OS.has_feature("dedicated_server"):
|
||||
get_tree().change_scene_to_packed.call_deferred(in_game_scene)
|
||||
|
||||
var peer = ENetMultiplayerPeer.new()
|
||||
peer.create_server(PORT, MAX_CLIENTS)
|
||||
multiplayer.multiplayer_peer = peer
|
||||
|
||||
multiplayer.peer_connected.connect(_on_connect)
|
||||
multiplayer.peer_disconnected.connect(_on_disconnect)
|
||||
else:
|
||||
get_tree().change_scene_to_packed.call_deferred(main_menu_scene)
|
||||
|
||||
func connect_to_ip(runner: bool = true, ip: String = "") -> void:
|
||||
if ip.is_empty(): ip = IP_ADDRESS
|
||||
|
||||
runner_client_selection = runner
|
||||
|
||||
print("Connecting to: %s" % ip)
|
||||
|
||||
var peer = ENetMultiplayerPeer.new()
|
||||
peer.create_client(ip, PORT)
|
||||
multiplayer.multiplayer_peer = peer
|
||||
|
||||
multiplayer.connected_to_server.connect(_on_connect_client)
|
||||
multiplayer.connection_failed.connect(_on_disconnect_client)
|
||||
multiplayer.server_disconnected.connect(_on_server_closed_client)
|
||||
|
||||
func _on_connect(id: int) -> void:
|
||||
print("Client ID #%s connected" % id)
|
||||
|
||||
func _on_disconnect(id: int) -> void:
|
||||
print("Client ID #%s disconnected" % id)
|
||||
if not multiplayer.is_server(): return
|
||||
|
||||
get_tree().get_current_scene().despawn_player(id)
|
||||
|
||||
func _on_connect_client() -> void:
|
||||
request_is_runner.rpc_id(1, runner_client_selection)
|
||||
print("[%s] Connected to server" % multiplayer.get_unique_id())
|
||||
|
||||
func _on_disconnect_client() -> void:
|
||||
print("[%s] Disconnected" % multiplayer.get_unique_id())
|
||||
|
||||
func _on_server_closed_client() -> void:
|
||||
print("[%s] Server closed" % multiplayer.get_unique_id())
|
||||
|
||||
@rpc("any_peer", "call_remote", "reliable")
|
||||
func request_is_runner(runner: bool) -> void:
|
||||
if not multiplayer.is_server(): return
|
||||
|
||||
var id := multiplayer.get_remote_sender_id()
|
||||
runner_dict[id] = runner
|
||||
print("Runner Dict: %s" % runner_dict)
|
||||
|
||||
get_tree().get_current_scene().spawn_player(id, runner)
|
||||
@@ -0,0 +1 @@
|
||||
uid://cm5vnqe8f0f2u
|
||||
@@ -0,0 +1,122 @@
|
||||
extends CharacterBody3D
|
||||
|
||||
@export var player_id := 69:
|
||||
set(id):
|
||||
player_id = id
|
||||
%Input.set_multiplayer_authority(id)
|
||||
|
||||
@export var state_machine: Node
|
||||
|
||||
@export_group("Camera")
|
||||
@export_range(0.0, 1.0) var mouse_sensitivity := 0.2
|
||||
@export var camera_follow_speed := 20.0
|
||||
@export var smooth_camera := false
|
||||
|
||||
@export_group("Movement")
|
||||
@export var run_speed := 8.0
|
||||
@export var walk_speed := 4.0
|
||||
@export var acceleration := 45.0
|
||||
@export var air_deceleration := 5.0
|
||||
@export var rotation_speed := 20.0
|
||||
|
||||
@export_group("Client Smoothing")
|
||||
@export var client_smoothing := false
|
||||
@export var client_smoothing_speed := 10.0
|
||||
@export var client_smoothing_rotation_speed := 25.0
|
||||
@export var client_prediction := false
|
||||
@export var client_prediction_tolerance := 0.3
|
||||
|
||||
@export_group("Server variables")
|
||||
@export var server_position := Vector3.ZERO
|
||||
@export var server_rotation := Vector3.ZERO
|
||||
@export var player := true
|
||||
@export var dead := false
|
||||
|
||||
@onready var _camera_pivot: Node3D = %CameraPivot
|
||||
@onready var _camera_platform: Node3D = %CameraPlatform
|
||||
@onready var _camera: Node3D = %Camera
|
||||
@onready var rotation_base: Node3D = %RotationBase
|
||||
@onready var collider: Node3D = %Collider
|
||||
|
||||
var camera_input_direction := Vector2.ZERO
|
||||
var last_direction := Vector3.FORWARD
|
||||
|
||||
var predicted_position := Vector3.ZERO
|
||||
var predicted_rotation := Vector3.ZERO
|
||||
|
||||
func _ready() -> void:
|
||||
state_machine.set_subject(self)
|
||||
if multiplayer.is_server(): return
|
||||
|
||||
if multiplayer.get_unique_id() == player_id:
|
||||
_camera.make_current()
|
||||
else:
|
||||
_camera.clear_current(false)
|
||||
|
||||
func _input(event: InputEvent) -> void:
|
||||
if multiplayer.get_unique_id() != player_id: return
|
||||
|
||||
if event.is_action_pressed("mouse_capture"):
|
||||
Input.mouse_mode = Input.MOUSE_MODE_CAPTURED
|
||||
elif event.is_action_pressed("mouse_release"):
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
|
||||
if event is InputEventMouseMotion:
|
||||
if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
||||
camera_input_direction += event.screen_relative * mouse_sensitivity
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if multiplayer.get_unique_id() != player_id: return
|
||||
|
||||
_camera_platform.global_rotation = _camera_pivot.global_rotation
|
||||
|
||||
if smooth_camera:
|
||||
_camera_platform.global_position = lerp(_camera_platform.global_position, _camera_pivot.global_position, camera_follow_speed * delta)
|
||||
else:
|
||||
_camera_platform.global_position = _camera_pivot.global_position
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
state_machine.process_physics(delta)
|
||||
if multiplayer.get_unique_id() == player_id:
|
||||
_camera_pivot.rotation.x = clamp(
|
||||
_camera_pivot.rotation.x - camera_input_direction.y * delta,
|
||||
-PI / 3.0,
|
||||
PI / 6.0,
|
||||
)
|
||||
_camera_pivot.rotation.y -= camera_input_direction.x * delta
|
||||
camera_input_direction = Vector2.ZERO
|
||||
|
||||
if not multiplayer.is_server():
|
||||
if multiplayer.get_unique_id() == player_id and client_prediction:
|
||||
predicted_position = position
|
||||
predicted_rotation = rotation_base.global_rotation
|
||||
|
||||
if multiplayer.get_unique_id() != player_id or not client_prediction:
|
||||
if client_smoothing:
|
||||
position = lerp(position, server_position, client_smoothing_speed * delta)
|
||||
rotation_base.global_rotation.x = server_rotation.x
|
||||
rotation_base.global_rotation.y = lerp_angle(rotation_base.global_rotation.y, server_rotation.y, client_smoothing_rotation_speed * delta)
|
||||
rotation_base.global_rotation.z = server_rotation.z
|
||||
else:
|
||||
position = server_position
|
||||
rotation_base.global_rotation = server_rotation
|
||||
#
|
||||
if multiplayer.is_server():
|
||||
server_position = position
|
||||
server_rotation = rotation_base.global_rotation
|
||||
|
||||
func _on_sync_delta_synchronized() -> void:
|
||||
if client_prediction and server_position.distance_to(predicted_position) > client_prediction_tolerance:
|
||||
print("%v VS %v" % [server_position, predicted_position])
|
||||
position = server_position
|
||||
|
||||
|
||||
func apply_input_velocity(delta: float, input_direction: Vector2, speed: float, acc: float) -> void:
|
||||
var target_velocity = Vector3(input_direction.x * speed, velocity.y, input_direction.y * speed)
|
||||
velocity = velocity.move_toward(target_velocity, acc * delta) + Main.gravity_velocity
|
||||
move_and_slide()
|
||||
|
||||
if input_direction.length() >= 0.1:
|
||||
last_direction = Vector3(input_direction.x, 0, input_direction.y)
|
||||
var target_angle := Vector3.FORWARD.signed_angle_to(last_direction, Vector3.UP)
|
||||
rotation_base.global_rotation.y = lerp_angle(rotation_base.rotation.y, target_angle, rotation_speed * delta)
|
||||
@@ -0,0 +1 @@
|
||||
uid://d3hbh4mxk38n6
|
||||
@@ -0,0 +1,42 @@
|
||||
extends State
|
||||
|
||||
var hit = false
|
||||
var players_in_area = {}
|
||||
|
||||
func enter() -> void:
|
||||
super()
|
||||
if has_node("%AttackHitbox"): %AttackHitbox.visible = true
|
||||
if has_node("%AttackTimer"): %AttackTimer.start()
|
||||
if has_node("%AttackCooldown"): %AttackCooldown.start()
|
||||
hit = false
|
||||
|
||||
func exit() -> void:
|
||||
super()
|
||||
if has_node("%AttackHitbox"): %AttackHitbox.visible = false
|
||||
|
||||
func process_physics(delta: float) -> State:
|
||||
if not Main.is_server_or_predicting(subject.player_id, subject.client_prediction): return
|
||||
var input_direction = %Input.direction if subject.is_on_floor() else Vector2.ZERO
|
||||
|
||||
subject.apply_input_velocity(delta, input_direction, subject.run_speed, subject.acceleration if subject.is_on_floor() else subject.air_deceleration)
|
||||
|
||||
if players_in_area.size() > 0:
|
||||
var hit_player = players_in_area[players_in_area.keys()[0]]
|
||||
hit_player.dead = true
|
||||
hit = true
|
||||
|
||||
if has_node("%AttackTimer") and %AttackTimer.time_left > 0 and not hit: return
|
||||
if not subject.is_on_floor(): return %Fall
|
||||
if input_direction.length() < 0.05: return %Idle
|
||||
if has_node("%Walk") and %Input.walk: return %Walk
|
||||
return %Run
|
||||
|
||||
func _on_attack_body_entered(body: Node3D) -> void:
|
||||
if body == subject: return
|
||||
if not "player" in body or not body.player: return
|
||||
if body.dead: return
|
||||
|
||||
players_in_area[body.name] = body
|
||||
|
||||
func _on_attack_body_exited(body: Node3D) -> void:
|
||||
players_in_area.erase(body.name)
|
||||
@@ -0,0 +1 @@
|
||||
uid://bu8fv7b2ndq3
|
||||
@@ -0,0 +1,17 @@
|
||||
extends State
|
||||
|
||||
func enter() -> void:
|
||||
super()
|
||||
subject.rotation_base.global_rotation.z = PI / 2
|
||||
subject.collider.disabled = true
|
||||
|
||||
func exit() -> void:
|
||||
super()
|
||||
subject.rotation_base.global_rotation.z = 0
|
||||
subject.collider.disabled = false
|
||||
|
||||
func process_physics(_delta: float) -> State:
|
||||
if not multiplayer.is_server(): return
|
||||
if not subject.dead: return %Idle
|
||||
|
||||
return
|
||||
@@ -0,0 +1 @@
|
||||
uid://c0u1dn17o73ox
|
||||
@@ -0,0 +1,12 @@
|
||||
extends State
|
||||
|
||||
func process_physics(delta: float) -> State:
|
||||
if not Main.is_server_or_predicting(subject.player_id, subject.client_prediction): return
|
||||
|
||||
subject.apply_input_velocity(delta, Vector2.ZERO, 0.0, subject.air_deceleration)
|
||||
|
||||
if not subject.is_on_floor(): return
|
||||
if has_node("%Dead") and subject.dead: return %Dead
|
||||
if %Input.direction.length() < 0.05: return %Idle
|
||||
if has_node("%Walk") and %Input.walk: return %Walk
|
||||
return %Run
|
||||
@@ -0,0 +1 @@
|
||||
uid://xwmho0fyx2rj
|
||||
@@ -0,0 +1,14 @@
|
||||
extends State
|
||||
|
||||
func process_physics(delta: float) -> State:
|
||||
if not Main.is_server_or_predicting(subject.player_id, subject.client_prediction): return
|
||||
|
||||
var input_direction = %Input.direction
|
||||
subject.apply_input_velocity(delta, Vector2.ZERO, 0.0, subject.acceleration)
|
||||
|
||||
if not subject.is_on_floor(): return %Fall
|
||||
if has_node("%Dead") and subject.dead: return %Dead
|
||||
if has_node("%Attack") and %Input.primary_interact and (not has_node("%AttackCooldown") or %AttackCooldown.time_left == 0): return %Attack
|
||||
if input_direction.length() < 0.05: return
|
||||
if has_node("%Walk") and %Input.walk: return %Walk
|
||||
return %Run
|
||||
@@ -0,0 +1 @@
|
||||
uid://beydsuuy3og2r
|
||||
@@ -0,0 +1,14 @@
|
||||
extends State
|
||||
|
||||
func process_physics(delta: float) -> State:
|
||||
if not Main.is_server_or_predicting(subject.player_id, subject.client_prediction): return
|
||||
|
||||
var input_direction = %Input.direction
|
||||
subject.apply_input_velocity(delta, input_direction, subject.run_speed, subject.acceleration)
|
||||
|
||||
if not subject.is_on_floor(): return %Fall
|
||||
if has_node("%Dead") and subject.dead: return %Dead
|
||||
if has_node("%Attack") and %Input.primary_interact and (not has_node("%AttackCooldown") or %AttackCooldown.time_left == 0): return %Attack
|
||||
if input_direction.length() < 0.05: return %Idle
|
||||
if has_node("%Walk") and %Input.walk: return %Walk
|
||||
return
|
||||
@@ -0,0 +1 @@
|
||||
uid://ciltmpb1wqqpr
|
||||
@@ -0,0 +1,20 @@
|
||||
class_name State
|
||||
extends Node
|
||||
|
||||
var subject
|
||||
|
||||
func enter() -> void:
|
||||
print("Entering state: %s" % name)
|
||||
pass
|
||||
|
||||
func exit() -> void:
|
||||
pass
|
||||
|
||||
func process_input(_event: InputEvent) -> State:
|
||||
return null
|
||||
|
||||
func process_frame(_delta: float) -> State:
|
||||
return null
|
||||
|
||||
func process_physics(_delta: float) -> State:
|
||||
return null
|
||||
@@ -0,0 +1 @@
|
||||
uid://dikih6wn2rwsk
|
||||
@@ -0,0 +1,36 @@
|
||||
extends Node
|
||||
|
||||
@export var current_state: State
|
||||
var subject: Node
|
||||
|
||||
func set_subject(new_subject: Node) -> void:
|
||||
subject = new_subject
|
||||
for state in get_children():
|
||||
state.subject = subject
|
||||
|
||||
func _change_state(new_state: State) -> void:
|
||||
if current_state: current_state.exit()
|
||||
|
||||
current_state = new_state
|
||||
current_state.enter()
|
||||
|
||||
func process_physics(delta: float) -> void:
|
||||
if not current_state or not current_state.subject: return
|
||||
|
||||
var new_state = current_state.process_physics(delta)
|
||||
if new_state:
|
||||
_change_state(new_state)
|
||||
|
||||
func process_input(event: InputEvent) -> void:
|
||||
if not current_state or not current_state.subject: return
|
||||
|
||||
var new_state = current_state.process_input(event)
|
||||
if new_state:
|
||||
_change_state(new_state)
|
||||
|
||||
func process_frame(delta: float) -> void:
|
||||
if not current_state or not current_state.subject: return
|
||||
|
||||
var new_state = current_state.process_frame(delta)
|
||||
if new_state:
|
||||
_change_state(new_state)
|
||||
@@ -0,0 +1 @@
|
||||
uid://20wwhts3wq7t
|
||||
@@ -0,0 +1,14 @@
|
||||
extends State
|
||||
|
||||
func process_physics(delta: float) -> State:
|
||||
if not Main.is_server_or_predicting(subject.player_id, subject.client_prediction): return
|
||||
|
||||
var input_direction = %Input.direction
|
||||
subject.apply_input_velocity(delta, input_direction, subject.walk_speed, subject.acceleration)
|
||||
|
||||
if not subject.is_on_floor(): return %Fall
|
||||
if has_node("%Dead") and subject.dead: return %Dead
|
||||
if has_node("%Attack") and %Input.primary_interact and (not has_node("%AttackCooldown") or %AttackCooldown.time_left == 0): return %Attack
|
||||
if input_direction.length() < 0.05: return %Idle
|
||||
if not %Input.walk: return %Run
|
||||
return
|
||||
@@ -0,0 +1 @@
|
||||
uid://5x0hciokrxcj
|
||||