Premier commit
@@ -0,0 +1,4 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
@@ -0,0 +1,2 @@
|
||||
# Normalize EOL for all files that Git considers text files.
|
||||
* text=auto eol=lf
|
||||
@@ -0,0 +1,20 @@
|
||||
# Godot 4+ specific ignores
|
||||
.godot/
|
||||
/android/
|
||||
|
||||
# Godot-specific ignores
|
||||
.import/
|
||||
export.cfg
|
||||
export_credentials.cfg
|
||||
|
||||
# Imported translations (automatically generated from CSV files)
|
||||
*.translation
|
||||
|
||||
# Mono-specific ignores
|
||||
.mono/
|
||||
data_*/
|
||||
mono_crash.*.json
|
||||
|
||||
.vscode
|
||||
|
||||
.export/
|
||||
@@ -0,0 +1,41 @@
|
||||
[gd_resource type="AnimatedTexture" format=3 uid="uid://dqasylgir7ka2"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://248ks3fx7lm3" path="res://common/assets/alien_2d_anim/alien_running0001.png" id="1_qwfpk"]
|
||||
[ext_resource type="Texture2D" uid="uid://cmp2y3c446xoj" path="res://common/assets/alien_2d_anim/alien_running0002.png" id="2_q53jl"]
|
||||
[ext_resource type="Texture2D" uid="uid://cqfucfwsif5q7" path="res://common/assets/alien_2d_anim/alien_running0011.png" id="3_hehve"]
|
||||
[ext_resource type="Texture2D" uid="uid://bvvuc0cnn6tvl" path="res://common/assets/alien_2d_anim/alien_running0012.png" id="4_te5nh"]
|
||||
[ext_resource type="Texture2D" uid="uid://dfmihbrigftd2" path="res://common/assets/alien_2d_anim/alien_running0003.png" id="5_lqyd0"]
|
||||
[ext_resource type="Texture2D" uid="uid://ds47iqvnbvhnv" path="res://common/assets/alien_2d_anim/alien_running0004.png" id="6_0ekdo"]
|
||||
[ext_resource type="Texture2D" uid="uid://bvgjs386j1tvo" path="res://common/assets/alien_2d_anim/alien_running0005.png" id="7_7rvmj"]
|
||||
[ext_resource type="Texture2D" uid="uid://d2u7fa7wqvqw8" path="res://common/assets/alien_2d_anim/alien_running0006.png" id="8_jbker"]
|
||||
[ext_resource type="Texture2D" uid="uid://bmmspo52gh7jf" path="res://common/assets/alien_2d_anim/alien_running0007.png" id="9_2mnul"]
|
||||
[ext_resource type="Texture2D" uid="uid://cdjotqiqyc33m" path="res://common/assets/alien_2d_anim/alien_running0008.png" id="10_5yosl"]
|
||||
[ext_resource type="Texture2D" uid="uid://cwmx4vskppoub" path="res://common/assets/alien_2d_anim/alien_running0009.png" id="11_8yks0"]
|
||||
[ext_resource type="Texture2D" uid="uid://db67eb3grgik8" path="res://common/assets/alien_2d_anim/alien_running0010.png" id="12_phvay"]
|
||||
|
||||
[resource]
|
||||
frames = 12
|
||||
speed_scale = 30.0
|
||||
frame_0/texture = ExtResource("1_qwfpk")
|
||||
frame_1/texture = ExtResource("2_q53jl")
|
||||
frame_1/duration = 1.0
|
||||
frame_2/texture = ExtResource("5_lqyd0")
|
||||
frame_2/duration = 1.0
|
||||
frame_3/texture = ExtResource("6_0ekdo")
|
||||
frame_3/duration = 1.0
|
||||
frame_4/texture = ExtResource("7_7rvmj")
|
||||
frame_4/duration = 1.0
|
||||
frame_5/texture = ExtResource("8_jbker")
|
||||
frame_5/duration = 1.0
|
||||
frame_6/texture = ExtResource("9_2mnul")
|
||||
frame_6/duration = 1.0
|
||||
frame_7/texture = ExtResource("10_5yosl")
|
||||
frame_7/duration = 1.0
|
||||
frame_8/texture = ExtResource("11_8yks0")
|
||||
frame_8/duration = 1.0
|
||||
frame_9/texture = ExtResource("12_phvay")
|
||||
frame_9/duration = 1.0
|
||||
frame_10/texture = ExtResource("3_hehve")
|
||||
frame_10/duration = 1.0
|
||||
frame_11/texture = ExtResource("4_te5nh")
|
||||
frame_11/duration = 1.0
|
||||
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://248ks3fx7lm3"
|
||||
path="res://.godot/imported/alien_running0001.png-42f344f725bc6add53eb238906bdc013.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0001.png"
|
||||
dest_files=["res://.godot/imported/alien_running0001.png-42f344f725bc6add53eb238906bdc013.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
|
||||
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cmp2y3c446xoj"
|
||||
path="res://.godot/imported/alien_running0002.png-7d3a056b15d287b1dacd919a6b87fe96.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0002.png"
|
||||
dest_files=["res://.godot/imported/alien_running0002.png-7d3a056b15d287b1dacd919a6b87fe96.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
|
||||
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dfmihbrigftd2"
|
||||
path="res://.godot/imported/alien_running0003.png-c85a3640a9e96a2e00b10afcc3390df7.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0003.png"
|
||||
dest_files=["res://.godot/imported/alien_running0003.png-c85a3640a9e96a2e00b10afcc3390df7.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
|
||||
|
After Width: | Height: | Size: 30 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ds47iqvnbvhnv"
|
||||
path="res://.godot/imported/alien_running0004.png-cb0333a3fba0c95e0c4e7e23e8ab166a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0004.png"
|
||||
dest_files=["res://.godot/imported/alien_running0004.png-cb0333a3fba0c95e0c4e7e23e8ab166a.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
|
||||
|
After Width: | Height: | Size: 30 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bvgjs386j1tvo"
|
||||
path="res://.godot/imported/alien_running0005.png-636f4637d8526267963463e80556cb6e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0005.png"
|
||||
dest_files=["res://.godot/imported/alien_running0005.png-636f4637d8526267963463e80556cb6e.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
|
||||
|
After Width: | Height: | Size: 29 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d2u7fa7wqvqw8"
|
||||
path="res://.godot/imported/alien_running0006.png-4d7fb0820714fa7c4d3b86fc7669c6f8.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0006.png"
|
||||
dest_files=["res://.godot/imported/alien_running0006.png-4d7fb0820714fa7c4d3b86fc7669c6f8.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
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bmmspo52gh7jf"
|
||||
path="res://.godot/imported/alien_running0007.png-c574b372219e5488a5c9f4260277d145.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0007.png"
|
||||
dest_files=["res://.godot/imported/alien_running0007.png-c574b372219e5488a5c9f4260277d145.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
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cdjotqiqyc33m"
|
||||
path="res://.godot/imported/alien_running0008.png-d4edc9da9f0aa04bd6b14f12cc5569e6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0008.png"
|
||||
dest_files=["res://.godot/imported/alien_running0008.png-d4edc9da9f0aa04bd6b14f12cc5569e6.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
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cwmx4vskppoub"
|
||||
path="res://.godot/imported/alien_running0009.png-873540969bc2269ebd94ab07d08b55ca.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0009.png"
|
||||
dest_files=["res://.godot/imported/alien_running0009.png-873540969bc2269ebd94ab07d08b55ca.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
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://db67eb3grgik8"
|
||||
path="res://.godot/imported/alien_running0010.png-d807b6be13956efb9ff9dd3f5949e1ed.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0010.png"
|
||||
dest_files=["res://.godot/imported/alien_running0010.png-d807b6be13956efb9ff9dd3f5949e1ed.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
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cqfucfwsif5q7"
|
||||
path="res://.godot/imported/alien_running0011.png-354b6ed57970ffaa1d41a542c28aee17.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0011.png"
|
||||
dest_files=["res://.godot/imported/alien_running0011.png-354b6ed57970ffaa1d41a542c28aee17.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
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bvvuc0cnn6tvl"
|
||||
path="res://.godot/imported/alien_running0012.png-a234c22f318b2e09a2237cc7c59f24b6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/alien_2d_anim/alien_running0012.png"
|
||||
dest_files=["res://.godot/imported/alien_running0012.png-a234c22f318b2e09a2237cc7c59f24b6.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
|
||||
|
After Width: | Height: | Size: 629 B |
@@ -0,0 +1,41 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cdr6ynvpd1rx1"
|
||||
path.s3tc="res://.godot/imported/palette.png-7e7ed16a17c6b935383aad2fc09bb560.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/palette.png"
|
||||
dest_files=["res://.godot/imported/palette.png-7e7ed16a17c6b935383aad2fc09bb560.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
|
||||
|
After Width: | Height: | Size: 7.9 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c46rt5tydx8ih"
|
||||
path="res://.godot/imported/wheat_pattern.png-e6c543a447bed8409ac1e7848eb8b8a5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/assets/wheat_pattern.png"
|
||||
dest_files=["res://.godot/imported/wheat_pattern.png-e6c543a447bed8409ac1e7848eb8b8a5.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
|
||||
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://ddiuqfq41f18x"
|
||||
path="res://.godot/imported/BPdotsPlus.otf-7830f8c00ee1e842bd23df9ee4b99d77.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/fonts/BPdotsPlus.otf"
|
||||
dest_files=["res://.godot/imported/BPdotsPlus.otf-7830f8c00ee1e842bd23df9ee4b99d77.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=3
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://iug4bpafhqp"
|
||||
path="res://.godot/imported/BPdotsPlusBold.otf-a8a1bcf573cfa976574a1ea039956873.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/fonts/BPdotsPlusBold.otf"
|
||||
dest_files=["res://.godot/imported/BPdotsPlusBold.otf-a8a1bcf573cfa976574a1ea039956873.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=3
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
@@ -0,0 +1,36 @@
|
||||
[remap]
|
||||
|
||||
importer="font_data_dynamic"
|
||||
type="FontFile"
|
||||
uid="uid://b7ysukag1831b"
|
||||
path="res://.godot/imported/Squarrez.otf-d1fa764de82361511159e4342aa41270.fontdata"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://common/fonts/Squarrez.otf"
|
||||
dest_files=["res://.godot/imported/Squarrez.otf-d1fa764de82361511159e4342aa41270.fontdata"]
|
||||
|
||||
[params]
|
||||
|
||||
Rendering=null
|
||||
antialiasing=1
|
||||
generate_mipmaps=false
|
||||
disable_embedded_bitmaps=true
|
||||
multichannel_signed_distance_field=false
|
||||
msdf_pixel_range=8
|
||||
msdf_size=48
|
||||
allow_system_fallback=true
|
||||
force_autohinter=false
|
||||
modulate_color_glyphs=false
|
||||
hinting=3
|
||||
subpixel_positioning=4
|
||||
keep_rounding_remainders=true
|
||||
oversampling=0.0
|
||||
Fallbacks=null
|
||||
fallbacks=[]
|
||||
Compress=null
|
||||
compress=true
|
||||
preload=[]
|
||||
language_support={}
|
||||
script_support={}
|
||||
opentype_features={}
|
||||
@@ -0,0 +1,10 @@
|
||||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://41afldgohk0o"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://cdr6ynvpd1rx1" path="res://common/assets/palette.png" id="1_rf3u1"]
|
||||
|
||||
[resource]
|
||||
shading_mode = 2
|
||||
diffuse_mode = 3
|
||||
specular_mode = 1
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_texture = ExtResource("1_rf3u1")
|
||||
@@ -0,0 +1,67 @@
|
||||
[gd_resource type="Theme" format=3 uid="uid://pemhq200t8km"]
|
||||
|
||||
[ext_resource type="FontFile" uid="uid://b7ysukag1831b" path="res://common/fonts/Squarrez.otf" id="1_t2mbe"]
|
||||
[ext_resource type="FontFile" uid="uid://iug4bpafhqp" path="res://common/fonts/BPdotsPlusBold.otf" id="2_21a82"]
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_pd64y"]
|
||||
bg_color = Color(0.9882353, 0.9372549, 0.5529412, 1)
|
||||
border_width_left = 15
|
||||
border_width_top = 15
|
||||
border_width_right = 15
|
||||
border_width_bottom = 15
|
||||
border_color = Color(0.9882353, 0.9372549, 0.5529412, 1)
|
||||
corner_radius_top_left = 100
|
||||
corner_radius_top_right = 100
|
||||
corner_detail = 1
|
||||
expand_margin_left = 40.0
|
||||
expand_margin_right = 40.0
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_t2mbe"]
|
||||
bg_color = Color(0.8, 0.25882354, 0.36862746, 1)
|
||||
border_width_left = 15
|
||||
border_width_top = 15
|
||||
border_width_right = 15
|
||||
border_width_bottom = 15
|
||||
border_color = Color(0.8, 0.25882354, 0.36862746, 1)
|
||||
corner_radius_top_left = 100
|
||||
corner_radius_top_right = 100
|
||||
corner_detail = 1
|
||||
expand_margin_left = 40.0
|
||||
expand_margin_right = 40.0
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_21a82"]
|
||||
bg_color = Color(0.22352941, 0.03529412, 0.2784314, 1)
|
||||
border_width_left = 15
|
||||
border_width_top = 15
|
||||
border_width_right = 15
|
||||
border_width_bottom = 15
|
||||
border_color = Color(0.8, 0.25882354, 0.36862746, 1)
|
||||
corner_radius_top_left = 100
|
||||
corner_radius_top_right = 100
|
||||
corner_detail = 1
|
||||
expand_margin_left = 40.0
|
||||
expand_margin_right = 40.0
|
||||
|
||||
[resource]
|
||||
Button/colors/font_hover_color = Color(0.23529412, 0.07058824, 0.28235295, 1)
|
||||
Button/font_sizes/font_size = 40
|
||||
Button/fonts/font = ExtResource("2_21a82")
|
||||
Button/styles/hover = SubResource("StyleBoxFlat_pd64y")
|
||||
Button/styles/normal = SubResource("StyleBoxFlat_t2mbe")
|
||||
Button/styles/pressed = SubResource("StyleBoxFlat_21a82")
|
||||
Label/colors/font_color = Color(0.8, 0.2627451, 0.36862746, 1)
|
||||
Label/colors/font_outline_color = Color(0.9882353, 0.9372549, 0.5529412, 1)
|
||||
Label/font_sizes/font_size = 30
|
||||
Label/fonts/font = ExtResource("1_t2mbe")
|
||||
RichTextLabel/colors/selection_color = Color(0.99, 0.93918, 0.5544, 0.7882353)
|
||||
RichTextLabel/font_sizes/bold_font_size = 40
|
||||
RichTextLabel/font_sizes/bold_italics_font_size = 40
|
||||
RichTextLabel/font_sizes/italics_font_size = 30
|
||||
RichTextLabel/font_sizes/mono_font_size = 30
|
||||
RichTextLabel/font_sizes/normal_font_size = 30
|
||||
RichTextLabel/fonts/bold_font = ExtResource("2_21a82")
|
||||
RichTextLabel/fonts/bold_italics_font = ExtResource("2_21a82")
|
||||
RichTextLabel/fonts/italics_font = ExtResource("2_21a82")
|
||||
RichTextLabel/fonts/mono_font = ExtResource("2_21a82")
|
||||
RichTextLabel/fonts/normal_font = ExtResource("2_21a82")
|
||||
VBoxContainer/constants/separation = 15
|
||||
@@ -0,0 +1,142 @@
|
||||
extends Area3D
|
||||
class_name Alien
|
||||
|
||||
const DEATH_SCENE : PackedScene = preload("res://entities/alien/alien_death_effect/alien_death_effect.tscn") as PackedScene
|
||||
const DEATH_SCENE_TIME : float = 10.
|
||||
|
||||
const COLLISION_HEIGHT = 5
|
||||
const COLLISION_RADIUS = 1.5
|
||||
const NEIGHBOR_DETECTION_MARGIN = 0.5
|
||||
|
||||
const ATTACK_DISTANCE = 6.
|
||||
|
||||
const NEIGHBOR_ROTATION = 0.5
|
||||
const NEIGHBOR_BUMP_FORCE = 4. * AlienHordeManager.CALCULATE_SCATTER_FREQUENCY
|
||||
const NEIGHBOR_BLOCKED_SPEED_FACTOR = 0.5
|
||||
const DIRECTION_DRIFT_RANGE = PI/8
|
||||
const DAMAGE_EFFECT_DURATION : float = 0.5
|
||||
|
||||
const DEFAULT_HP : float = 20.
|
||||
const DEFAULT_DAMAGE_RATE : float = 1.
|
||||
|
||||
signal died
|
||||
|
||||
enum State {RUNNING, ATTACKING, DEAD}
|
||||
|
||||
@export var size : float = 1.0
|
||||
@export var speed : float = 10.
|
||||
@export var turn_speed : float = 20.
|
||||
|
||||
@onready var damage_rate : float = size * DEFAULT_DAMAGE_RATE
|
||||
@onready var hp : float = size * DEFAULT_HP
|
||||
var state : State = State.RUNNING
|
||||
var damage_effect_last : float = 0.
|
||||
|
||||
var id : int = 0
|
||||
var target : Node3D
|
||||
|
||||
@onready var collision_shape : CollisionShape3D = generate_collision_shape()
|
||||
|
||||
func _ready():
|
||||
monitoring = false
|
||||
|
||||
func generate_collision_shape() -> CollisionShape3D:
|
||||
var new_collision_shape : CollisionShape3D= CollisionShape3D.new()
|
||||
var cylinder_shape : CylinderShape3D = CylinderShape3D.new()
|
||||
|
||||
cylinder_shape.height = COLLISION_HEIGHT
|
||||
cylinder_shape.radius = COLLISION_RADIUS
|
||||
|
||||
new_collision_shape.shape = cylinder_shape
|
||||
|
||||
new_collision_shape.position = Vector3(0,COLLISION_HEIGHT/2.,0)
|
||||
|
||||
add_child(new_collision_shape)
|
||||
|
||||
return new_collision_shape
|
||||
|
||||
func move(
|
||||
delta: float,
|
||||
calculate_direction: bool,
|
||||
calculate_scatter : bool
|
||||
):
|
||||
var target_angle = rotation.y
|
||||
var current_speed = speed
|
||||
|
||||
if calculate_direction and target:
|
||||
target_angle = calculate_target_angle()
|
||||
|
||||
if calculate_scatter:
|
||||
var collision_right = has_neighbor(1)
|
||||
var collision_left = has_neighbor(-1)
|
||||
|
||||
if collision_left and not collision_right:
|
||||
target_angle += - NEIGHBOR_ROTATION
|
||||
position += Vector3.RIGHT.rotated(Vector3.UP, rotation.y) * NEIGHBOR_BUMP_FORCE * delta
|
||||
elif collision_right and not collision_left:
|
||||
target_angle += NEIGHBOR_ROTATION
|
||||
position += Vector3.LEFT.rotated(Vector3.UP, rotation.y) * NEIGHBOR_BUMP_FORCE * delta
|
||||
elif collision_left and collision_right:
|
||||
current_speed = speed * get_random().randf_range(0., NEIGHBOR_BLOCKED_SPEED_FACTOR)
|
||||
|
||||
rotation.y = lerp_angle(
|
||||
rotation.y,
|
||||
target_angle,
|
||||
min(1, delta*turn_speed)
|
||||
)
|
||||
|
||||
position += Vector3.FORWARD.rotated(Vector3.UP, rotation.y) * current_speed * delta
|
||||
|
||||
func calculate_target_angle() -> float:
|
||||
|
||||
var target_angle : float = (
|
||||
Vector2(global_position.z,global_position.x)
|
||||
- Vector2(target.global_position.z,target.global_position.x)
|
||||
).normalized().angle()
|
||||
|
||||
# Random drift in direction
|
||||
target_angle += get_random().randf_range(-DIRECTION_DRIFT_RANGE, DIRECTION_DRIFT_RANGE)
|
||||
|
||||
return target_angle
|
||||
|
||||
|
||||
|
||||
func has_neighbor(direction = 1) -> bool:
|
||||
var space_state = get_world_3d().direct_space_state
|
||||
|
||||
var query = PhysicsRayQueryParameters3D.create(
|
||||
global_position,
|
||||
global_position + Vector3(
|
||||
direction * (COLLISION_RADIUS + NEIGHBOR_DETECTION_MARGIN), 0,0
|
||||
).rotated(Vector3.UP, rotation.y)
|
||||
)
|
||||
query.collide_with_areas = true
|
||||
query.exclude.append(get_rid())
|
||||
|
||||
var result = space_state.intersect_ray(query)
|
||||
|
||||
return result != {}
|
||||
|
||||
func attack_target(delta : float):
|
||||
if target and target.has_method("hit"):
|
||||
target.hit(delta * damage_rate)
|
||||
|
||||
func hit(damage = 1.):
|
||||
hp = max(0, hp - damage)
|
||||
damage_effect_last = DAMAGE_EFFECT_DURATION
|
||||
if hp == 0:
|
||||
die()
|
||||
|
||||
func die():
|
||||
died.emit()
|
||||
state = State.DEAD
|
||||
collision_shape.disabled = true
|
||||
add_child(DEATH_SCENE.instantiate())
|
||||
await get_tree().create_timer(DEATH_SCENE_TIME).timeout
|
||||
queue_free()
|
||||
|
||||
func get_random() -> RandomNumberGenerator:
|
||||
var random : RandomNumberGenerator = RandomNumberGenerator.new()
|
||||
random.seed = id
|
||||
|
||||
return random
|
||||
@@ -0,0 +1 @@
|
||||
uid://bkfr1dvvrmota
|
||||
@@ -0,0 +1,43 @@
|
||||
[gd_scene format=3 uid="uid://10ogf77klwu"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bkfr1dvvrmota" path="res://entities/alien/alien.gd" id="1_qp64o"]
|
||||
[ext_resource type="Texture2D" uid="uid://dvgqy34aw6xfc" path="res://entities/mecha/assets/textures/pointer.svg" id="3_ym0y8"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_g4v7s"]
|
||||
height = 4.0
|
||||
radius = 1.5
|
||||
|
||||
[node name="Alien" type="Area3D" unique_id=537229132]
|
||||
monitoring = false
|
||||
monitorable = false
|
||||
script = ExtResource("1_qp64o")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=209124875]
|
||||
unique_name_in_owner = true
|
||||
shape = SubResource("CylinderShape3D_g4v7s")
|
||||
|
||||
[node name="ColliderRayCast3D" type="RayCast3D" parent="." unique_id=303441313]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 2, -0.1)
|
||||
target_position = Vector3(0, -2, 0)
|
||||
|
||||
[node name="NeighborRRayCast3D" type="RayCast3D" parent="." unique_id=91948683]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0.1, 2, 0.5)
|
||||
target_position = Vector3(2, 0, 0)
|
||||
collide_with_areas = true
|
||||
collide_with_bodies = false
|
||||
|
||||
[node name="NeighborLRayCast3D" type="RayCast3D" parent="." unique_id=580620392]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, -0.1, 2, 0.5)
|
||||
target_position = Vector3(-2, 0, 0)
|
||||
collide_with_areas = true
|
||||
collide_with_bodies = false
|
||||
|
||||
[node name="Indicator" type="Sprite3D" parent="." unique_id=1377230752]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.514289, 0)
|
||||
visible = false
|
||||
billboard = 1
|
||||
texture = ExtResource("3_ym0y8")
|
||||
@@ -0,0 +1,5 @@
|
||||
extends Node3D
|
||||
|
||||
func _ready():
|
||||
%ExplosionGPUParticles3D.emitting = true
|
||||
%CorpseGPUParticles3D.emitting = true
|
||||
@@ -0,0 +1 @@
|
||||
uid://lhn14psdj7hr
|
||||
@@ -0,0 +1,121 @@
|
||||
[gd_scene format=3 uid="uid://mi0hwb80ud8h"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://lhn14psdj7hr" path="res://entities/alien/alien_death_effect/alien_death_effect.gd" id="1_vt2i7"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://667gyf6p35nw" path="res://entities/alien/assets/3d/alien_part.tres" id="2_on0xa"]
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_t4u1q"]
|
||||
offsets = PackedFloat32Array(0, 0.8219697, 1)
|
||||
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0)
|
||||
|
||||
[sub_resource type="GradientTexture1D" id="GradientTexture1D_p1u0y"]
|
||||
gradient = SubResource("Gradient_t4u1q")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_p83er"]
|
||||
_data = [Vector2(0, 0), 0.0, 2.7057414, 0, 0, Vector2(0.8, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 3
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_3gngh"]
|
||||
curve = SubResource("Curve_p83er")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_g4v7s"]
|
||||
lifetime_randomness = 0.5
|
||||
angle_min = 1.0728835e-05
|
||||
angle_max = 1.0728835e-05
|
||||
direction = Vector3(0, 1, 0)
|
||||
spread = 114.231
|
||||
initial_velocity_min = 2.0
|
||||
initial_velocity_max = 3.0
|
||||
radial_velocity_min = -2.2351742e-05
|
||||
radial_velocity_max = 0.39997762
|
||||
gravity = Vector3(0, 0, 0)
|
||||
use_scale_3d = true
|
||||
scale_3d_min = Vector3(1, 1, 1)
|
||||
scale_3d_max = Vector3(1, 1, 1)
|
||||
scale_min = 0.5
|
||||
scale_max = 0.5
|
||||
scale_curve = SubResource("CurveTexture_3gngh")
|
||||
color_ramp = SubResource("GradientTexture1D_p1u0y")
|
||||
hue_variation_min = -2.2351742e-08
|
||||
hue_variation_max = 0.09999997
|
||||
|
||||
[sub_resource type="Gradient" id="Gradient_d6cdn"]
|
||||
interpolation_mode = 1
|
||||
colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0)
|
||||
|
||||
[sub_resource type="GradientTexture2D" id="GradientTexture2D_fcnqv"]
|
||||
gradient = SubResource("Gradient_d6cdn")
|
||||
fill = 1
|
||||
fill_from = Vector2(0.5, 0.5)
|
||||
fill_to = Vector2(1, 0.5)
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_57qmd"]
|
||||
transparency = 1
|
||||
shading_mode = 0
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(0.73333335, 0.6156863, 0.69803923, 1)
|
||||
albedo_texture = SubResource("GradientTexture2D_fcnqv")
|
||||
billboard_mode = 1
|
||||
billboard_keep_scale = true
|
||||
|
||||
[sub_resource type="QuadMesh" id="QuadMesh_yf5fn"]
|
||||
material = SubResource("StandardMaterial3D_57qmd")
|
||||
|
||||
[sub_resource type="Curve" id="Curve_kxalf"]
|
||||
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.8793103, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||
point_count = 3
|
||||
|
||||
[sub_resource type="CurveTexture" id="CurveTexture_fcnqv"]
|
||||
curve = SubResource("Curve_kxalf")
|
||||
|
||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_emcji"]
|
||||
lifetime_randomness = 0.5
|
||||
angle_min = 1.0728835e-05
|
||||
angle_max = 1.0728835e-05
|
||||
use_rotation_3d = true
|
||||
rotation_3d_min = Vector3(0, 0, 0)
|
||||
rotation_3d_max = Vector3(360, 360, 360)
|
||||
inherit_velocity_ratio = 1.0
|
||||
direction = Vector3(0, 1, 0)
|
||||
spread = 33.462
|
||||
initial_velocity_min = 4.0
|
||||
initial_velocity_max = 6.0
|
||||
radial_velocity_min = -2.2351742e-05
|
||||
radial_velocity_max = 0.39997762
|
||||
gravity = Vector3(0, -9.1, 0)
|
||||
scale_min = 0.59999996
|
||||
scale_curve = SubResource("CurveTexture_fcnqv")
|
||||
collision_mode = 1
|
||||
collision_friction = 1.0
|
||||
collision_bounce = 0.5
|
||||
|
||||
[node name="AlienDeathEffect" type="Node3D" unique_id=1248383251]
|
||||
script = ExtResource("1_vt2i7")
|
||||
|
||||
[node name="ExplosionGPUParticles3D" type="GPUParticles3D" parent="." unique_id=416874722]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.2686481, -0.70010376)
|
||||
emitting = false
|
||||
amount = 20
|
||||
one_shot = true
|
||||
speed_scale = 3.0
|
||||
explosiveness = 1.0
|
||||
local_coords = true
|
||||
process_material = SubResource("ParticleProcessMaterial_g4v7s")
|
||||
draw_pass_1 = SubResource("QuadMesh_yf5fn")
|
||||
|
||||
[node name="CorpseGPUParticles3D" type="GPUParticles3D" parent="." unique_id=810474087]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.2686481, -0.70010376)
|
||||
emitting = false
|
||||
amount = 5
|
||||
lifetime = 10.0
|
||||
one_shot = true
|
||||
speed_scale = 2.0
|
||||
explosiveness = 1.0
|
||||
local_coords = true
|
||||
process_material = SubResource("ParticleProcessMaterial_emcji")
|
||||
draw_pass_1 = ExtResource("2_on0xa")
|
||||
|
||||
[node name="GPUParticlesCollisionBox3D" type="GPUParticlesCollisionBox3D" parent="." unique_id=813937432]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
|
||||
size = Vector3(12, 2, 12)
|
||||
@@ -0,0 +1,143 @@
|
||||
extends Node
|
||||
class_name AlienHordeManager
|
||||
|
||||
const CALCULATE_TARGET_FREQUENCY = 10
|
||||
const CALCULATE_DIRECTION_FREQUENCY = 10
|
||||
const CALCULATE_SCATTER_FREQUENCY = 5
|
||||
const CALCULATE_STATE_FREQUENCY = 5
|
||||
const ATTACK_DISTANCE = 10.
|
||||
const MECHA_ATTACK_DISTANCE = 5.
|
||||
const MAX_ALIEN_MECHA_AGGRO_DISTANCE = 100
|
||||
const ALIEN_RANDOM_SCALE = 0.3
|
||||
const MASTODONT_CHANCE = 0.01
|
||||
const MASTODONT_SCALE_FACTOR = 4.
|
||||
|
||||
@export var hex_map : HexMap
|
||||
@export var mecha : Mecha
|
||||
|
||||
@onready var multimeshes : Array[MultiMeshInstance3D] = [
|
||||
%RunningAlienMultiMesh,
|
||||
%AttackingAlienMultiMesh
|
||||
]
|
||||
@onready var targets : Array = hex_map.get_all_tiles_with_id("House")
|
||||
|
||||
var current_frame : int = 0
|
||||
|
||||
var alien_id_acc : int = 0
|
||||
|
||||
var aliens : Array[Alien] = []
|
||||
|
||||
func _physics_process(delta):
|
||||
current_frame += 1
|
||||
|
||||
for t in targets:
|
||||
if t is HouseHexTile:
|
||||
if t.destroyed:
|
||||
targets.erase(t)
|
||||
|
||||
# if current_frame % CALCULATE_CLUSTERS_FREQUENCY == 0:
|
||||
# calculate_clusters()
|
||||
|
||||
calculate_target()
|
||||
calculate_state()
|
||||
update_horde(delta)
|
||||
spawn_models(delta)
|
||||
|
||||
func spawn_alien(position : Vector3, rotation: float) -> Alien:
|
||||
var alien : Alien = Alien.new()
|
||||
alien.id = alien_id_acc
|
||||
alien.position = position
|
||||
alien.rotation.y = rotation
|
||||
var is_mastodont = randf() < MASTODONT_CHANCE
|
||||
alien.size = randf_range(1. - ALIEN_RANDOM_SCALE, 1. + ALIEN_RANDOM_SCALE) * (MASTODONT_SCALE_FACTOR if is_mastodont else 1.)
|
||||
alien.scale = Vector3.ONE * alien.size
|
||||
|
||||
add_child(alien)
|
||||
|
||||
aliens.append(alien)
|
||||
|
||||
alien.died.connect(
|
||||
func():
|
||||
aliens.erase(alien)
|
||||
)
|
||||
|
||||
|
||||
alien_id_acc += 1
|
||||
|
||||
return alien
|
||||
|
||||
func calculate_target():
|
||||
for alien in aliens:
|
||||
if (current_frame + alien.id)%CALCULATE_TARGET_FREQUENCY and alien.state != Alien.State.DEAD :
|
||||
if (
|
||||
len(targets) == 0
|
||||
or mecha.position.distance_to(alien.position) < alien.get_random().randf_range(0., MAX_ALIEN_MECHA_AGGRO_DISTANCE)
|
||||
):
|
||||
alien.target = mecha
|
||||
else :
|
||||
var old_target = alien.target
|
||||
alien.target = targets[alien.get_random().randi() % len(targets)]
|
||||
if old_target != alien.target:
|
||||
alien.state = Alien.State.RUNNING
|
||||
|
||||
|
||||
func calculate_state():
|
||||
for alien in aliens:
|
||||
if (current_frame + alien.id)%CALCULATE_STATE_FREQUENCY and alien.state != Alien.State.DEAD and alien.target:
|
||||
var target_attack_distance = MECHA_ATTACK_DISTANCE if alien.target is Mecha else ATTACK_DISTANCE
|
||||
alien.state = (
|
||||
Alien.State.RUNNING if alien.target.position.distance_to(alien.position) > target_attack_distance
|
||||
else Alien.State.ATTACKING
|
||||
)
|
||||
|
||||
func update_horde(delta):
|
||||
for alien in aliens:
|
||||
match alien.state:
|
||||
Alien.State.RUNNING:
|
||||
alien.move(
|
||||
delta,
|
||||
(current_frame + alien.id)%CALCULATE_DIRECTION_FREQUENCY,
|
||||
(current_frame + alien.id)%CALCULATE_SCATTER_FREQUENCY
|
||||
)
|
||||
Alien.State.ATTACKING:
|
||||
alien.attack_target(delta)
|
||||
|
||||
func alien_to_multimesh_id(alien : Alien) -> int:
|
||||
match alien.state:
|
||||
Alien.State.RUNNING:
|
||||
return 0
|
||||
Alien.State.ATTACKING:
|
||||
return 1
|
||||
_: return -1
|
||||
|
||||
func spawn_models(delta):
|
||||
|
||||
for m_id in range(len(multimeshes)):
|
||||
var multimesh = multimeshes[m_id].multimesh
|
||||
|
||||
multimesh.instance_count = len(aliens)
|
||||
|
||||
for i in range(len(aliens)):
|
||||
var alien = aliens[i]
|
||||
var is_current = m_id == alien_to_multimesh_id(alien)
|
||||
|
||||
multimesh.set_instance_transform(
|
||||
i,
|
||||
alien.transform.scaled(Vector3.ONE if is_current else Vector3.ZERO)
|
||||
)
|
||||
|
||||
if alien.damage_effect_last > 0:
|
||||
alien.damage_effect_last -= delta
|
||||
|
||||
multimesh.set_instance_custom_data(
|
||||
i,
|
||||
Color(
|
||||
alien.id,
|
||||
alien.damage_effect_last > 0,
|
||||
alien.size,
|
||||
0
|
||||
))
|
||||
multimesh.set_instance_color(i ,Color(alien.get_random().randi()%255,alien.get_random().randi()%255,alien.get_random().randi()%255))
|
||||
|
||||
func is_alien_alive(alien):
|
||||
return alien and alien is Alien and alien.hp > 0
|
||||
@@ -0,0 +1 @@
|
||||
uid://bsiixctjr7ml4
|
||||
@@ -0,0 +1,28 @@
|
||||
[gd_scene format=3 uid="uid://brr2idsr7qmpf"]
|
||||
|
||||
[ext_resource type="ArrayMesh" uid="uid://cgv8clg8y80on" path="res://entities/alien/assets/vat/running_alien_vat/alien_mesh.tres" id="1_0bggl"]
|
||||
[ext_resource type="Script" uid="uid://bsiixctjr7ml4" path="res://entities/alien/alien_horde_manager/alien_horde_manager.gd" id="1_hjbcl"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://chhggu10sxmuc" path="res://entities/alien/assets/vat/attacking_alien_vat/alien_mesh.tres" id="2_hjbcl"]
|
||||
|
||||
[sub_resource type="MultiMesh" id="MultiMesh_33mok"]
|
||||
transform_format = 1
|
||||
use_colors = true
|
||||
use_custom_data = true
|
||||
mesh = ExtResource("2_hjbcl")
|
||||
|
||||
[sub_resource type="MultiMesh" id="MultiMesh_tj3hn"]
|
||||
transform_format = 1
|
||||
use_colors = true
|
||||
use_custom_data = true
|
||||
mesh = ExtResource("1_0bggl")
|
||||
|
||||
[node name="AlienHordeManager" type="Node" unique_id=1604717993]
|
||||
script = ExtResource("1_hjbcl")
|
||||
|
||||
[node name="AttackingAlienMultiMesh" type="MultiMeshInstance3D" parent="." unique_id=1055420147]
|
||||
unique_name_in_owner = true
|
||||
multimesh = SubResource("MultiMesh_33mok")
|
||||
|
||||
[node name="RunningAlienMultiMesh" type="MultiMeshInstance3D" parent="." unique_id=245629817]
|
||||
unique_name_in_owner = true
|
||||
multimesh = SubResource("MultiMesh_tj3hn")
|
||||
@@ -0,0 +1,75 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cyjynungpt2a6"
|
||||
path="res://.godot/imported/alien_part.blend-3b5a9ff739e267fe3e3ee37a08e055a3.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/3d/alien_part.blend"
|
||||
dest_files=["res://.godot/imported/alien_part.blend-3b5a9ff739e267fe3e3ee37a08e055a3.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={
|
||||
"meshes": {
|
||||
"alien_part_Plane_002": {
|
||||
"generate/lightmap_uv": 0,
|
||||
"generate/lods": 0,
|
||||
"generate/shadow_meshes": 0,
|
||||
"lods/normal_merge_angle": 20.0,
|
||||
"save_to_file/enabled": true,
|
||||
"save_to_file/fallback_path": "res://entities/alien/assets/3d/alien_part.tres",
|
||||
"save_to_file/path": "uid://dbxb76bsurcoy"
|
||||
}
|
||||
}
|
||||
}
|
||||
blender/nodes/visible=0
|
||||
blender/nodes/active_collection_only=false
|
||||
blender/nodes/punctual_lights=true
|
||||
blender/nodes/cameras=true
|
||||
blender/nodes/custom_properties=true
|
||||
blender/nodes/modifiers=1
|
||||
blender/meshes/vertex_colors=1
|
||||
blender/meshes/uvs=true
|
||||
blender/meshes/normals=true
|
||||
blender/meshes/export_geometry_nodes_instances=false
|
||||
blender/meshes/gpu_instances=false
|
||||
blender/meshes/tangents=true
|
||||
blender/meshes/skins=2
|
||||
blender/meshes/export_bones_deforming_mesh_only=false
|
||||
blender/materials/unpack_enabled=true
|
||||
blender/materials/export_materials=1
|
||||
blender/animation/limit_playback=true
|
||||
blender/animation/always_sample=true
|
||||
blender/animation/group_tracks=true
|
||||
gltf/naming_version=2
|
||||
gltf/texture_map_mode=1
|
||||
@@ -0,0 +1,37 @@
|
||||
[gd_resource type="ArrayMesh" format=4 uid="uid://667gyf6p35nw"]
|
||||
|
||||
[ext_resource type="Material" uid="uid://41afldgohk0o" path="res://common/materials/default3d.tres" id="1_ndtte"]
|
||||
|
||||
[sub_resource type="ArrayMesh" id="ArrayMesh_ndtte"]
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.875597, -0.4483304, -0.68256557, 1.751194, 1.2514424, 1.2417288),
|
||||
"format": 34359742465,
|
||||
"index_count": 102,
|
||||
"index_data": PackedByteArray("CQABAAIAAwABAAkAAAADAAkAAAAEAAMACQAMAAAAAAAFAAQADAAFAAAACgAMAAkAAgAKAAkABQAMAA0ACgANAAwACgAOAA0ABQANAA4AAgAPAAoAEAAOAAoAEAAKAA8ABQAOABAAAgARAA8AEAAPABEABQAQABIAEAARABIAEQATABIAFAASABMAEQAUABMAFAAFABIAAgAGABEAEQAGABQABgACAAcACAAGAAcABgALABQACwAGAAgABQAUAAsACwAIAAQABQALAAQA"),
|
||||
"lods": [0.7015672, PackedByteArray("CQABAAIAAwABAAkAAAADAAkAAAAEAAMAAgAKAAkACgAAAAkACgACAAYABgACAAcACgAFAAAACgAGAAUAAAAFAAQACAAGAAcABgALAAUACwAGAAgABQALAAQACwAIAAQA"), 1.0523508, PackedByteArray("AAABAAIAAwABAAAAAAAEAAMAAgAFAAAAAAAFAAQAAgAGAAUABQAGAAQABgACAAcABgAIAAQACAAGAAcA")],
|
||||
"name": "Material",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 21,
|
||||
"vertex_data": PackedByteArray("ISdgPwiTGr5SJQ8/2gkwu8CYTT/gi28+sCxlsxiS6j7A4Qc9WD6TuiCyRz5Agb0+eNEDMyj6Ir78ywo/8AUBM/xJ5b6uUCq/yAYav7B/QD78Mbg+vgkwO8CYTT/Yi28+fD2TOiCyRz5Agb0+xwYaP8B/QD4AMrg+SncBP4DqSTxQA5a+ICdgvwiTGr5SJQ8/tQk6P8iij7748Gs+tQk6P9TYvr4Au3C+dmqQPoiL5b5mRyq/YCOHsjjmwD44ErK+wPeaMfAN9b2evC6/S3cBv4DqSTxQA5a+dGqQvpCL5b52Ryq/tQk6v9jYvr4gu3C+tQk6v8iij7748Gs+")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
|
||||
[resource]
|
||||
resource_name = "alien_part_Plane_002"
|
||||
_surfaces = [{
|
||||
"aabb": AABB(-0.875597, -0.4483304, -0.68256557, 1.751194, 1.2514424, 1.2417288),
|
||||
"attribute_data": PackedByteArray("qFa/PjyPYT+oVr8+bMeHPqhWvz6Sn88+qFa/PsO5YD+oVr8+VoVhP6hWvz5MFyM/qFa/PmzHhz5C8Lg+VCp8P0LwuD6uI3w/QvC4PsEEUj9C8Lg+YD4SP0LwuD4MM1I/QvC4PsEEUj9C8Lg+YD4SP6hWvz5MFyM/qFa/PkWOIz+oVr8+PI9hP0LwuD4MM1I/QvC4PlQqfD+oVr8+RY4jP6hWvz4uv9E+qFa/PsuPYT+oVr8+y49hP6hWvz7gzmA/qFa/PhzSLD+oVr8+4M5gP6hWvz7Lj2E/qFa/PsuPYT8="),
|
||||
"format": 34359742487,
|
||||
"index_count": 102,
|
||||
"index_data": PackedByteArray("DgABAAIABQACAAYAAgAPAA4AAgAFABMAAgAUAA8AAgATABQAEwAFABUABQAQABUAEwAVABYAAwAVABAAAwAQAAQAFQAXABYAEwAWABcAFQADABcAGAAUABMAGAATABcAGAAPABQAAwAYABcAGAAZAA8AAwAZABgADwAZABoAAwAaABkAAAADAAQADwAaABsAAwAbABoAGwADAAAADwAbAA4ADgAbAAAABwAJABEACQAKABEABwAIAAkAEgAMAAgAEgALAAwADAALAA0A"),
|
||||
"lods": [0.7015672, PackedByteArray("DgABAAIAAgAPAA4ADwAAAA4ADwACAAUABQACAAYADwADAAAADwAFAAMAAAADAAQABQAQAAMAAwAQAAQABwAJABEACQAKABEABwAIAAkAEgAMAAgAEgALAAwADAALAA0A"), 1.0523508, PackedByteArray("AAABAAIAAgADAAAAAAADAAQAAwAFAAQAAgAFAAMABQACAAYABwAIAAkACQAKAAcACwAMAAgADAALAA0A")],
|
||||
"material": ExtResource("1_ndtte"),
|
||||
"name": "Material",
|
||||
"primitive": 3,
|
||||
"uv_scale": Vector4(0, 0, 0, 0),
|
||||
"vertex_count": 28,
|
||||
"vertex_data": PackedByteArray("ISdgPwiTGr5SJQ8/2gkwu8CYTT/gi28+sCxlsxiS6j7A4Qc98AUBM/xJ5b6uUCq/eNEDMyj6Ir78ywo/yAYav7B/QD78Mbg+vgkwO8CYTT/Yi28+ISdgPwiTGr5SJQ8/eNEDMyj6Ir78ywo/WD6TuiCyRz5Agb0+2gkwu8CYTT/gi28+yAYav7B/QD78Mbg+fD2TOiCyRz5Agb0+vgkwO8CYTT/Yi28+xwYaP8B/QD4AMrg+SncBP4DqSTxQA5a+ICdgvwiTGr5SJQ8/xwYaP8B/QD4AMrg+ICdgvwiTGr5SJQ8/S3cBv4DqSTxQA5a+YCOHsjjmwD44ErK+tQk6v8iij7748Gs+tQk6v9jYvr4gu3C+dGqQvpCL5b52Ryq/wPeaMfAN9b2evC6/dmqQPoiL5b5mRyq/tQk6P9TYvr4Au3C+tQk6P8iij7748Gs+gMYlbv///z8Gvsu9////P4G2//////+/YbYAAP///7//f0FY////PwJSkLb///8/+EHLvf///z+AxiVu////P/9/QVj///8/wIBjov///z8Gvsu9////PwJSkLb///8/Pn9jov///z/4Qcu9////P/ytkLb///8/hth3zP///79+OSVu////P/ytkLb///8/fjklbv///z94J3fM////v6i0//////+/SyvGTf///79lK7xC////v6AuBx3///+/MNv//////79e0Qcd////v5nUvEL///+/s9TGTf///78=")
|
||||
}]
|
||||
blend_shape_mode = 0
|
||||
shadow_mesh = SubResource("ArrayMesh_ndtte")
|
||||
@@ -0,0 +1,29 @@
|
||||
[gd_resource type="ShaderMaterial" format=3 uid="uid://b48t0vv053qrt"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://gjx57s1ye44t" path="res://entities/alien/assets/shader/vat.gdshader" id="1_nk817"]
|
||||
[ext_resource type="Texture2D" uid="uid://cmyt23s5n76ak" path="res://entities/alien/assets/textures/alien_base_color.png" id="2_a2hb3"]
|
||||
[ext_resource type="Texture2D" uid="uid://4peb6wokfoyu" path="res://entities/alien/assets/textures/alien_normal.png" id="3_7iaoq"]
|
||||
[ext_resource type="Texture2D" uid="uid://cbjj8cusm385o" path="res://entities/alien/assets/vat/attacking_alien_vat/Alien_vat.exr" id="4_nk817"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_nk817")
|
||||
shader_parameter/vertex_animation_texture = ExtResource("4_nk817")
|
||||
shader_parameter/min_bounds = Vector3(-0.2, -0.8, -0.4)
|
||||
shader_parameter/max_bounds = Vector3(1, 2.2, 4.9)
|
||||
shader_parameter/autoplay = true
|
||||
shader_parameter/autoplay_speed = 30.0
|
||||
shader_parameter/frame = 12.0
|
||||
shader_parameter/use_uv_1 = false
|
||||
shader_parameter/cull_mode = 0
|
||||
shader_parameter/albedo_map = ExtResource("2_a2hb3")
|
||||
shader_parameter/albedo_tint = Color(1, 1, 1, 1)
|
||||
shader_parameter/occlusion_channel = Color(1, 0, 0, 1)
|
||||
shader_parameter/occlusion = 1.0
|
||||
shader_parameter/roughness_channel = Color(0, 1, 0, 1)
|
||||
shader_parameter/roughness = 1.0
|
||||
shader_parameter/metallic_channel = Color(0, 0, 1, 1)
|
||||
shader_parameter/metallic = 1.0
|
||||
shader_parameter/specular = 0.5
|
||||
shader_parameter/normal_map = ExtResource("3_7iaoq")
|
||||
shader_parameter/normal_map_scale = 1.0
|
||||
@@ -0,0 +1,29 @@
|
||||
[gd_resource type="ShaderMaterial" format=3 uid="uid://b7o0pgg1fweqq"]
|
||||
|
||||
[ext_resource type="Shader" uid="uid://gjx57s1ye44t" path="res://entities/alien/assets/shader/vat.gdshader" id="1_ig0tm"]
|
||||
[ext_resource type="Texture2D" uid="uid://cmyt23s5n76ak" path="res://entities/alien/assets/textures/alien_base_color.png" id="2_cxjnj"]
|
||||
[ext_resource type="Texture2D" uid="uid://4peb6wokfoyu" path="res://entities/alien/assets/textures/alien_normal.png" id="3_1leus"]
|
||||
[ext_resource type="Texture2D" uid="uid://cxy6bh1jymqsk" path="res://entities/alien/assets/vat/running_alien_vat/Alien_vat.exr" id="3_ig0tm"]
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_ig0tm")
|
||||
shader_parameter/vertex_animation_texture = ExtResource("3_ig0tm")
|
||||
shader_parameter/min_bounds = Vector3(-0.2, -2, -0.9)
|
||||
shader_parameter/max_bounds = Vector3(0.1, 3.4, 1.1)
|
||||
shader_parameter/autoplay = true
|
||||
shader_parameter/autoplay_speed = 30.0
|
||||
shader_parameter/frame = 12.0
|
||||
shader_parameter/use_uv_1 = false
|
||||
shader_parameter/cull_mode = 0
|
||||
shader_parameter/albedo_map = ExtResource("2_cxjnj")
|
||||
shader_parameter/albedo_tint = Color(1, 1, 1, 1)
|
||||
shader_parameter/occlusion_channel = Color(1, 0, 0, 1)
|
||||
shader_parameter/occlusion = 1.0
|
||||
shader_parameter/roughness_channel = Color(0, 1, 0, 1)
|
||||
shader_parameter/roughness = 1.0
|
||||
shader_parameter/metallic_channel = Color(0, 0, 1, 1)
|
||||
shader_parameter/metallic = 1.0
|
||||
shader_parameter/specular = 0.5
|
||||
shader_parameter/normal_map = ExtResource("3_1leus")
|
||||
shader_parameter/normal_map_scale = 1.0
|
||||
@@ -0,0 +1,169 @@
|
||||
// Shader stolen here : https://godotshaders.com/shader/vertex-animation-texture-uses-openvat-output/
|
||||
shader_type spatial;
|
||||
render_mode cull_disabled; // Prevents GPU hardware culling so shader can handle it
|
||||
/*
|
||||
For use with models exported from Blender using the OpenVAT plugin.
|
||||
Expects:
|
||||
Vertex Normals - Packed (Math gets too complex to include a toggle. Making a separate shader recommended if normals are not needed.)
|
||||
Use Single Row - On
|
||||
Export Model - On
|
||||
Model Format - glTF Binary. (Unsure why the otherse do not work)
|
||||
|
||||
Ensure .exr file is set to Lossless compression and MipMaps - Off.
|
||||
*/
|
||||
|
||||
// --- Uniforms ---
|
||||
group_uniforms openVAT_inputs;
|
||||
/** OpenVAT texture exported from Blender plugin. */
|
||||
uniform sampler2D vertex_animation_texture : repeat_disable;
|
||||
/** Min values from the .json file included with OpenVAT exports. */
|
||||
uniform vec3 min_bounds;
|
||||
/** Max values from the .json file included with OpenVAT exports. */
|
||||
uniform vec3 max_bounds;
|
||||
/** Plays animation automatically. Turn off to control manually via keyframes. */
|
||||
uniform bool autoplay = true;
|
||||
/**
|
||||
Autoplay speed in frames per second. Defaults to 30.
|
||||
[b]Blender default is 24. May require adjustment either in Blender or Here to match speed.[b]
|
||||
*/
|
||||
uniform float autoplay_speed = 30.0;
|
||||
/** Frame to display if animating manually. */
|
||||
uniform float frame = 1.0;
|
||||
|
||||
/** Enable this if the asset does not have 2 UV sets. */
|
||||
uniform bool use_uv_1 = false;
|
||||
/** Cull Mode, editable here for flexibility.
|
||||
0: Backface Cull
|
||||
1: Frontface Cull
|
||||
2: Cull disabled (double sided rendering)*/
|
||||
uniform int cull_mode : hint_enum("Back:0", "Front:1", "Disabled:2") = 0;
|
||||
group_uniforms;
|
||||
|
||||
group_uniforms Albedo_map;
|
||||
uniform sampler2D albedo_map : source_color, hint_default_white;
|
||||
uniform vec4 albedo_tint : source_color = vec4(1.0);
|
||||
group_uniforms;
|
||||
|
||||
group_uniforms ORM_inputs;
|
||||
/**
|
||||
[b]ORM texture.[/b] Standardized detail maps for PBR materials. Ignore, remap, or remove as needed.
|
||||
[b]O[/b]cclusion (Ambient)
|
||||
[b]R[/b]oughness
|
||||
[b]M[/b]etallic
|
||||
*/
|
||||
uniform sampler2D orm_map : hint_default_white;
|
||||
/** Select channel used by Occlusion map. R G [b]or[/b] B, combining will have strange results */
|
||||
uniform vec4 occlusion_channel : source_color = vec4(1.0, 0.0, 0.0, 1.0);
|
||||
/** Strength of Occlusion*/
|
||||
uniform float occlusion : hint_range(0.0, 1.0) = 1.0;
|
||||
/** Select channel used by Roughness map. R G [b]or[/b] B, combining will have strange results */
|
||||
uniform vec4 roughness_channel : source_color = vec4(0.0, 1.0, 0.0, 1.0);
|
||||
/** Strength of Roughness*/
|
||||
uniform float roughness : hint_range(0.0, 1.0) = 1.0;
|
||||
/** Select channel used by Metallic map. R G [b]or[/b] B, combining will have strange results */
|
||||
uniform vec4 metallic_channel : source_color = vec4(0.0, 0.0, 1.0, 1.0);
|
||||
/** Strength of Metallic*/
|
||||
uniform float metallic : hint_range(0.0, 1.0) = 1.0;
|
||||
/** Strength of Specular (No Map Included)*/
|
||||
uniform float specular : hint_range(0.0, 1.0) = 0.5;
|
||||
group_uniforms;
|
||||
|
||||
group_uniforms Normal_map;
|
||||
uniform sampler2D normal_map : hint_roughness_normal;
|
||||
uniform float normal_map_scale : hint_range(-10.0, 10.0) = 1.0;
|
||||
|
||||
/** Passed data from INSTANCE_CUSTOM_VARIABLE :
|
||||
x : Unique Id
|
||||
y : Damage effect
|
||||
z : Size
|
||||
**/
|
||||
|
||||
varying flat float unique_id;
|
||||
varying flat float damage_effect;
|
||||
varying flat float size;
|
||||
|
||||
float remapFloat(float value, float input_min, float input_max, float output_min, float output_max){
|
||||
// Code to replicate the remap feature from Visual Shader.
|
||||
float _input_range = input_max - input_min;
|
||||
float _output_range = output_max - output_min;
|
||||
return output_min + _output_range * ((value - input_min) / _input_range);
|
||||
}
|
||||
|
||||
void vertex() {
|
||||
unique_id = INSTANCE_CUSTOM.x;
|
||||
damage_effect = INSTANCE_CUSTOM.y;
|
||||
size = INSTANCE_CUSTOM.z;
|
||||
|
||||
// Animation Timing
|
||||
// ------
|
||||
// Divided by 2. since bottom half of texture is the normal data.
|
||||
// Second argument (0) is MipMap level. These VATs use no mipmaps so always 0.
|
||||
int total_frames = textureSize(vertex_animation_texture, 0).y / 2;
|
||||
// Checks if Autoplaying is checked
|
||||
float play_frame = autoplay ? (TIME * autoplay_speed / size) : frame;
|
||||
|
||||
|
||||
// Loops the current frame counter so it stays between 0 and total_frames - 1
|
||||
float current_frame = mod(play_frame + unique_id, float(total_frames));
|
||||
|
||||
// Compute UV Coordinates
|
||||
// ------
|
||||
// samples pixel from the center, not the edge. Avoid unwanted bleeding into normal data pixels at the end of the loop.
|
||||
float center_pixel = current_frame - 0.5;
|
||||
float vat_y = center_pixel / float(total_frames);
|
||||
vat_y = clamp(vat_y * 0.5, 0.0, 0.5);
|
||||
|
||||
vec2 vat_uv = vec2((use_uv_1 ? UV.x : UV2.x), vat_y);
|
||||
|
||||
// Vertex Position Displacement
|
||||
// ------
|
||||
vec4 vat_pos_raw = texture(vertex_animation_texture, vat_uv);
|
||||
// Must go through some remapping to convert Blender to Godot coordinates
|
||||
vec3 offset_values = vec3(
|
||||
remapFloat(vat_pos_raw.r, 0.0, 1.0, min_bounds.x, max_bounds.x),
|
||||
remapFloat(vat_pos_raw.b, 0.0, 1.0, min_bounds.z, max_bounds.z),
|
||||
remapFloat(vat_pos_raw.g, 1.0, 0.0, min_bounds.y, max_bounds.y)
|
||||
);
|
||||
VERTEX += offset_values;
|
||||
|
||||
// Normals. 0.5 added to UV.y to shift it down by 1/2 the map - to the normals section.
|
||||
vec4 vat_norm_raw = texture(vertex_animation_texture, vat_uv + vec2(0.0, 0.5));
|
||||
vec3 decoded_normals = vec3(
|
||||
remapFloat(vat_norm_raw.r, 0.0, 1.0, -1.0, 1.0),
|
||||
remapFloat(vat_norm_raw.b, 0.0, 1.0, -1.0, 1.0),
|
||||
remapFloat(vat_norm_raw.g, 1.0, 0.0, -1.0, 1.0)
|
||||
);
|
||||
NORMAL = normalize(decoded_normals);
|
||||
|
||||
// Calculate Tangent and Binormal from computed Normal
|
||||
TANGENT = normalize(vec3(abs(NORMAL.y) + abs(NORMAL.z), 0.0, -abs(NORMAL.x)));
|
||||
BINORMAL = normalize(vec3(0.0, abs(NORMAL.x) + abs(NORMAL.z), -abs(NORMAL.y)));
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
// Cull Mode
|
||||
if (cull_mode == 0 && !FRONT_FACING) {
|
||||
discard; // Cull back faces
|
||||
}
|
||||
else if (cull_mode == 1 && FRONT_FACING) {
|
||||
discard; // Cull front faces
|
||||
}
|
||||
|
||||
// Albedo
|
||||
ALBEDO = texture(albedo_map, UV).rgb * albedo_tint.rgb;
|
||||
|
||||
EMISSION = vec3(1.,1.,1.) * damage_effect;
|
||||
|
||||
// ORM maps (Occlusion, Roughness, Metallic) Packing
|
||||
vec4 orm_tex = texture(orm_map, UV);
|
||||
AO = occlusion * dot(orm_tex.rgb, occlusion_channel.rgb);
|
||||
ROUGHNESS = roughness * dot(orm_tex.rgb, roughness_channel.rgb);
|
||||
METALLIC = metallic * dot(orm_tex.rgb, metallic_channel.rgb);
|
||||
|
||||
// Specular
|
||||
SPECULAR = specular;
|
||||
|
||||
// Normal Map
|
||||
NORMAL_MAP = texture(normal_map, UV).rgb;
|
||||
NORMAL_MAP_DEPTH = normal_map_scale;
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
uid://gjx57s1ye44t
|
||||
|
After Width: | Height: | Size: 94 KiB |
@@ -0,0 +1,41 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cmyt23s5n76ak"
|
||||
path.s3tc="res://.godot/imported/alien_base_color.png-86b98d00ab0dc2f32c9eec134715ed52.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/textures/alien_base_color.png"
|
||||
dest_files=["res://.godot/imported/alien_base_color.png-86b98d00ab0dc2f32c9eec134715ed52.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
|
||||
|
After Width: | Height: | Size: 27 KiB |
@@ -0,0 +1,41 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://4peb6wokfoyu"
|
||||
path.s3tc="res://.godot/imported/alien_normal.png-1cf9a8467a6c91a4f9725d4eaacfcf3f.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/textures/alien_normal.png"
|
||||
dest_files=["res://.godot/imported/alien_normal.png-1cf9a8467a6c91a4f9725d4eaacfcf3f.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://entities/alien/assets/textures/alien_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
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="79.375mm"
|
||||
height="79.375mm"
|
||||
viewBox="0 0 79.375 79.375"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
sodipodi:docname="stain.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="2.2375049"
|
||||
inkscape:cx="130.27904"
|
||||
inkscape:cy="161.78736"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:label="Calque 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff;stroke-width:2.30664;stroke-linecap:round;paint-order:stroke fill markers;fill-opacity:1"
|
||||
d="M 38.600507,23.826755 C 33.435229,26.617406 23.967905,12.705978 24.302365,13.542127 c 0.334459,0.836148 5.450332,11.19757 3.488055,12.308192 -3.353618,1.898103 -18.037041,-10.71951 -18.037041,-10.71951 0,0 7.412537,9.636789 5.68581,14.548987 -1.130403,3.215773 -8.863175,5.100506 -8.863175,5.100506 0,0 9.071694,-1.522301 10.869932,1.672296 2.071801,3.680585 -4.849662,11.706082 -4.849662,11.706082 0,0 12.541637,-4.879053 15.30152,-0.585304 2.379106,3.701344 -5.936656,11.789697 -5.936656,11.789697 0,0 9.269778,-8.334192 13.766893,-6.103886 5.414476,2.685263 4.180743,17.642735 4.180743,17.642735 0,0 0.304675,-12.335049 4.962837,-14.130912 8.343511,-3.216675 23.579391,12.793076 23.579391,12.793076 0,0 -16.366284,-17.953012 -14.381755,-20.820102 1.468454,-2.121506 11.873309,3.260979 12.709459,3.428209 0.836149,0.16723 -5.713781,-3.30117 -5.184122,-5.853039 0.562559,-2.710379 7.525337,-3.511825 7.525337,-3.511825 0,0 -9.290842,-1.681472 -9.699323,-5.351351 -0.659584,-5.925848 13.378378,-11.873311 13.378378,-11.873311 0,0 -15.447192,6.786266 -17.057432,4.766048 -1.251294,-1.569883 12.040541,-8.612332 12.040541,-8.612332 0,0 -8.720738,4.194812 -12.124156,1.923143 -3.266774,-2.180465 -2.759291,-11.455237 -2.759291,-11.455237 0,0 -2.332874,6.07263 -5.016891,6.354729 -4.251764,0.446876 -9.866554,-8.194256 -9.866554,-8.194256 0,0 4.537013,11.326998 0.585304,13.461993 z"
|
||||
id="path1"
|
||||
sodipodi:nodetypes="asscacacacacacssacacscacaca" />
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff;stroke-width:2.30664;stroke-linecap:round;paint-order:stroke fill markers;fill-opacity:1"
|
||||
d="m 19.680232,16.465199 c 0.896728,4.593961 3.477795,7.479963 3.341915,2.902904 -0.05403,-1.819945 -3.341915,-2.902904 -3.341915,-2.902904 z"
|
||||
id="path2"
|
||||
sodipodi:nodetypes="czc" />
|
||||
<path
|
||||
style="opacity:1;fill:#ffffff;stroke-width:2.30664;stroke-linecap:round;paint-order:stroke fill markers;fill-opacity:1"
|
||||
d="m 59.353071,52.958861 c -1.811385,2.713194 7.483347,6.307322 7.483347,6.307322 -1.359715,-1.888021 -6.479923,-7.810307 -7.483347,-6.307322 z"
|
||||
id="path3"
|
||||
sodipodi:nodetypes="scs" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ci1qyjgjvtpbj"
|
||||
path.s3tc="res://.godot/imported/stain.svg-f2fdcdf42fafc92b5172e9a1b9c7292d.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/textures/stain.svg"
|
||||
dest_files=["res://.godot/imported/stain.svg-f2fdcdf42fafc92b5172e9a1b9c7292d.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
|
||||
svg/scale=1.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"os-remap": {
|
||||
"Min": [
|
||||
-0.2,
|
||||
-0.8,
|
||||
-0.4
|
||||
],
|
||||
"Max": [
|
||||
1.0,
|
||||
2.2,
|
||||
4.9
|
||||
],
|
||||
"Frames": 12
|
||||
},
|
||||
"animations": {}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://blpvoauvdf700"
|
||||
path="res://.godot/imported/Alien.glb-d7449a099f5202e69c28d18dd7bdda8c.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/vat/attacking_alien_vat/Alien.glb"
|
||||
dest_files=["res://.godot/imported/Alien.glb-d7449a099f5202e69c28d18dd7bdda8c.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={
|
||||
"materials": {
|
||||
"@MATERIAL:0": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "uid://b48t0vv053qrt"
|
||||
}
|
||||
},
|
||||
"meshes": {
|
||||
"Alien_Alien_mesh": {
|
||||
"generate/lightmap_uv": 0,
|
||||
"generate/lods": 0,
|
||||
"generate/shadow_meshes": 0,
|
||||
"lods/normal_merge_angle": 20.0,
|
||||
"save_to_file/enabled": true,
|
||||
"save_to_file/fallback_path": "res://entities/alien/assets/vat/attacking_alien_vat/alien_mesh.tres",
|
||||
"save_to_file/path": "uid://dmkpueem7h3gg"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cbjj8cusm385o"
|
||||
path="res://.godot/imported/Alien_vat.exr-0e18ace1cc9af2d3f2eab97c0bf74649.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/vat/attacking_alien_vat/Alien_vat.exr"
|
||||
dest_files=["res://.godot/imported/Alien_vat.exr-0e18ace1cc9af2d3f2eab97c0bf74649.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=0
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"os-remap": {
|
||||
"Min": [
|
||||
-0.2,
|
||||
-2.0,
|
||||
-0.9
|
||||
],
|
||||
"Max": [
|
||||
0.1,
|
||||
3.4,
|
||||
1.1
|
||||
],
|
||||
"Frames": 12
|
||||
},
|
||||
"animations": {}
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://c8b280nh1i42w"
|
||||
path="res://.godot/imported/Alien.glb-fad778d224a52bd474cfd3984bcf01f5.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/vat/running_alien_vat/Alien.glb"
|
||||
dest_files=["res://.godot/imported/Alien.glb-fad778d224a52bd474cfd3984bcf01f5.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={
|
||||
"materials": {
|
||||
"@MATERIAL:0": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "uid://b7o0pgg1fweqq"
|
||||
}
|
||||
},
|
||||
"meshes": {
|
||||
"Alien_Alien_mesh_001": {
|
||||
"generate/lightmap_uv": 0,
|
||||
"generate/lods": 0,
|
||||
"generate/shadow_meshes": 0,
|
||||
"lods/normal_merge_angle": 20.0,
|
||||
"save_to_file/enabled": true,
|
||||
"save_to_file/fallback_path": "res://entities/alien/assets/vat/running_alien_vat/alien_mesh.tres",
|
||||
"save_to_file/path": "uid://cgv8clg8y80on"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
gltf/texture_map_mode=1
|
||||
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cxy6bh1jymqsk"
|
||||
path="res://.godot/imported/Alien_vat.exr-412e4d42f972d99628cc1bff26b09e66.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/alien/assets/vat/running_alien_vat/Alien_vat.exr"
|
||||
dest_files=["res://.godot/imported/Alien_vat.exr-412e4d42f972d99628cc1bff26b09e66.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=0
|
||||
@@ -0,0 +1,71 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://hq2acth6vm2d"
|
||||
path="res://.godot/imported/mecha-body.blend-9265dc8fca82c0eb6c666e9c3b7ef0a5.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/mecha/assets/3d/mecha-body.blend"
|
||||
dest_files=["res://.godot/imported/mecha-body.blend-9265dc8fca82c0eb6c666e9c3b7ef0a5.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={
|
||||
"materials": {
|
||||
"Material": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://common/materials/default3d.tres",
|
||||
"use_external/path": "uid://41afldgohk0o"
|
||||
}
|
||||
}
|
||||
}
|
||||
blender/nodes/visible=0
|
||||
blender/nodes/active_collection_only=false
|
||||
blender/nodes/punctual_lights=true
|
||||
blender/nodes/cameras=true
|
||||
blender/nodes/custom_properties=true
|
||||
blender/nodes/modifiers=1
|
||||
blender/meshes/vertex_colors=1
|
||||
blender/meshes/uvs=true
|
||||
blender/meshes/normals=true
|
||||
blender/meshes/export_geometry_nodes_instances=false
|
||||
blender/meshes/gpu_instances=false
|
||||
blender/meshes/tangents=true
|
||||
blender/meshes/skins=2
|
||||
blender/meshes/export_bones_deforming_mesh_only=false
|
||||
blender/materials/unpack_enabled=true
|
||||
blender/materials/export_materials=1
|
||||
blender/animation/limit_playback=true
|
||||
blender/animation/always_sample=true
|
||||
blender/animation/group_tracks=true
|
||||
gltf/naming_version=2
|
||||
gltf/texture_map_mode=1
|
||||
@@ -0,0 +1,71 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cahdsj2xg25fy"
|
||||
path="res://.godot/imported/mecha-leg.blend-6470342e2c60263cb402b38e461944d0.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/mecha/assets/3d/mecha-leg.blend"
|
||||
dest_files=["res://.godot/imported/mecha-leg.blend-6470342e2c60263cb402b38e461944d0.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={
|
||||
"materials": {
|
||||
"Material": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/fallback_path": "res://common/materials/default3d.tres",
|
||||
"use_external/path": "uid://41afldgohk0o"
|
||||
}
|
||||
}
|
||||
}
|
||||
blender/nodes/visible=0
|
||||
blender/nodes/active_collection_only=false
|
||||
blender/nodes/punctual_lights=true
|
||||
blender/nodes/cameras=true
|
||||
blender/nodes/custom_properties=true
|
||||
blender/nodes/modifiers=1
|
||||
blender/meshes/vertex_colors=1
|
||||
blender/meshes/uvs=true
|
||||
blender/meshes/normals=true
|
||||
blender/meshes/export_geometry_nodes_instances=false
|
||||
blender/meshes/gpu_instances=false
|
||||
blender/meshes/tangents=true
|
||||
blender/meshes/skins=2
|
||||
blender/meshes/export_bones_deforming_mesh_only=false
|
||||
blender/materials/unpack_enabled=true
|
||||
blender/materials/export_materials=1
|
||||
blender/animation/limit_playback=true
|
||||
blender/animation/always_sample=true
|
||||
blender/animation/group_tracks=true
|
||||
gltf/naming_version=2
|
||||
gltf/texture_map_mode=1
|
||||
@@ -0,0 +1,70 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
stroke="currentColor"
|
||||
stroke-width="2"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
class="icon icon-tabler icons-tabler-outline icon-tabler-viewfinder"
|
||||
version="1.1"
|
||||
id="svg7"
|
||||
sodipodi:docname="pointer.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25, custom)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs7">
|
||||
<inkscape:path-effect
|
||||
effect="fillet_chamfer"
|
||||
id="path-effect2"
|
||||
is_visible="true"
|
||||
lpeversion="1"
|
||||
nodesatellites_param="F,0,1,1,0,3.0840606,0,1 @ F,0,1,1,0,3.0840606,0,1 @ F,0,1,1,0,3.0840606,0,1 @ F,0,0,1,0,3.0840606,0,1"
|
||||
radius="0"
|
||||
unit="px"
|
||||
method="auto"
|
||||
mode="F"
|
||||
chamfer_steps="1"
|
||||
flexible="false"
|
||||
use_knot_distance="true"
|
||||
apply_no_radius="true"
|
||||
apply_with_radius="true"
|
||||
only_selected="false"
|
||||
hide_knots="false" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="namedview7"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#ffffff"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:zoom="26.162951"
|
||||
inkscape:cx="7.8546186"
|
||||
inkscape:cy="10.855045"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1009"
|
||||
inkscape:window-x="-8"
|
||||
inkscape:window-y="-8"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg7" />
|
||||
<path
|
||||
stroke="none"
|
||||
d="M0 0h24v24H0z"
|
||||
fill="none"
|
||||
id="path1" />
|
||||
<path
|
||||
style="opacity:0.99;fill:#ffffff;stroke:none;stroke-width:7.32073;stroke-linecap:round;paint-order:stroke fill markers"
|
||||
d="M 4.5637528,7.5609963 10.142119,18.132668 a 1.7858436,1.7858436 2.2539244 0 0 3.088495,0.121559 L 20.496517,6.7727607 A 1.1112523,1.1112523 52.142331 0 0 19.21332,5.1219064 L 15.745404,6.2515455 A 10.824164,10.824164 177.861 0 1 9.8175039,6.472952 L 6.1199605,5.5671764 A 1.386555,1.386555 127.9726 0 0 4.5637528,7.5609963 Z"
|
||||
id="path2"
|
||||
inkscape:path-effect="#path-effect2"
|
||||
inkscape:original-d="M 3.1244684,4.8333801 11.581403,20.860284 22.145728,4.1667036 12.812996,7.2067483 Z"
|
||||
transform="matrix(1.190867,0,0,1.190867,-2.3927323,-2.3049427)" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dvgqy34aw6xfc"
|
||||
path.s3tc="res://.godot/imported/pointer.svg-f098bd9bb13ed2213cbb52b3b3bd4f05.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://entities/mecha/assets/textures/pointer.svg"
|
||||
dest_files=["res://.godot/imported/pointer.svg-f098bd9bb13ed2213cbb52b3b3bd4f05.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
|
||||
svg/scale=5.0
|
||||
editor/scale_with_editor_scale=false
|
||||
editor/convert_colors_with_editor_theme=false
|
||||
@@ -0,0 +1,142 @@
|
||||
@tool
|
||||
extends CharacterBody3D
|
||||
class_name Mecha
|
||||
|
||||
const STEP_MOVE_DISPLACEMENT = 3
|
||||
const RECOIL_STRENGHT = 0.5
|
||||
const MOUSE_SENSIVITY = 0.01
|
||||
const ZOOM_SENSIVITY = 1.
|
||||
|
||||
const MAX_ZOOM = 60.
|
||||
const MIN_ZOOM = 15.
|
||||
|
||||
const MAX_HP : float = 50.
|
||||
|
||||
signal died
|
||||
|
||||
@export var hp : float = MAX_HP
|
||||
|
||||
@export var max_speed : float = 15.
|
||||
@export var turn_speed : float = 5.
|
||||
|
||||
var destination := Vector2()
|
||||
|
||||
@onready var legs : Array[MechaLeg] = [
|
||||
%Leg1,
|
||||
%Leg2,
|
||||
%Leg3,
|
||||
%Leg4,
|
||||
]
|
||||
|
||||
var turn_normal : Vector2 = Vector2.UP
|
||||
|
||||
var selected_item = 0
|
||||
|
||||
var current_recoil = 0.
|
||||
|
||||
func _ready():
|
||||
for l in legs:
|
||||
l.step.connect(next_leg_can_step)
|
||||
|
||||
|
||||
func next_leg_can_step():
|
||||
for l in legs:
|
||||
l.can_step = false
|
||||
await get_tree().create_timer(MechaLeg.STEP_DURATION / len(legs)).timeout
|
||||
for l in legs:
|
||||
l.can_step = true
|
||||
|
||||
|
||||
func _process(delta):
|
||||
if not Engine.is_editor_hint():
|
||||
var target = calculate_target_position()
|
||||
%Target.global_position = target
|
||||
|
||||
var target_turn = (Vector2(position.x,position.z) - Vector2(target.x,target.z)).normalized()
|
||||
|
||||
turn_normal = lerp(
|
||||
turn_normal,
|
||||
target_turn,
|
||||
min(turn_speed * delta, 1.)
|
||||
)
|
||||
|
||||
var speed = 0.
|
||||
var item_used = false
|
||||
|
||||
for i in range(len(%Inventory.get_children())):
|
||||
var item = %Inventory.get_children()[i]
|
||||
if item is Weapon:
|
||||
var used = item.process_fire(
|
||||
delta,
|
||||
self,
|
||||
selected_item == i and Input.is_action_pressed("fire")
|
||||
)
|
||||
if used:
|
||||
item_used = true
|
||||
|
||||
if not item_used and Input.is_action_pressed("move_to"):
|
||||
speed = max_speed
|
||||
|
||||
var front_factor = 1 - (turn_normal - target_turn).length() / 2.
|
||||
|
||||
velocity = position.direction_to(target) * speed * front_factor
|
||||
|
||||
%Model.rotation.y = - turn_normal.angle()
|
||||
|
||||
# Recoil
|
||||
%Model.position = Vector3(turn_normal.x, 0, turn_normal.y) * current_recoil * RECOIL_STRENGHT
|
||||
current_recoil = lerp(current_recoil, 0., 0.5)
|
||||
|
||||
%StepTargets.position.x = lerp(
|
||||
0,
|
||||
-STEP_MOVE_DISPLACEMENT,
|
||||
speed/max_speed
|
||||
)
|
||||
|
||||
%Camera3D.look_at(self.position)
|
||||
|
||||
move_and_slide()
|
||||
|
||||
func calculate_target_position() -> Vector3:
|
||||
var camera : Camera3D = get_viewport().get_camera_3d()
|
||||
|
||||
if camera:
|
||||
var ray_normal := camera.project_ray_normal(get_viewport().get_mouse_position())
|
||||
var ray_origin := camera.project_ray_origin(get_viewport().get_mouse_position())
|
||||
|
||||
var plane = Plane(Vector3.UP, 0)
|
||||
var intersection = plane.intersects_ray(ray_origin, ray_normal)
|
||||
if intersection:
|
||||
return intersection
|
||||
return global_position
|
||||
|
||||
func get_target_angle() -> float:
|
||||
return - turn_normal.angle() + PI / 2
|
||||
|
||||
func get_projectile_spwan_point() -> Vector3:
|
||||
return global_position + Vector3.UP * 2.
|
||||
|
||||
func add_recoil(recoil : = 1.):
|
||||
current_recoil += recoil
|
||||
|
||||
func hit(damage = 1.):
|
||||
hp = max(0, hp - damage)
|
||||
if hp == 0:
|
||||
die()
|
||||
|
||||
func die():
|
||||
died.emit()
|
||||
|
||||
func _unhandled_input(event):
|
||||
if Input.is_action_just_pressed("zoom_in"):
|
||||
%Camera3D.position.z = max(MIN_ZOOM, %Camera3D.position.z - ZOOM_SENSIVITY)
|
||||
if Input.is_action_just_pressed("zoom_out"):
|
||||
%Camera3D.position.z = min(MAX_ZOOM, %Camera3D.position.z + ZOOM_SENSIVITY)
|
||||
if event is InputEventMouseMotion and Input.is_action_pressed("turn_camera") and Input.mouse_mode == Input.MOUSE_MODE_VISIBLE:
|
||||
Input.mouse_mode = Input.MOUSE_MODE_VISIBLE
|
||||
%CameraPivot.rotation.y -= event.relative.x * MOUSE_SENSIVITY
|
||||
%CameraPivot.rotation.x -= event.relative.y * MOUSE_SENSIVITY
|
||||
if %CameraPivot.rotation.x > deg_to_rad(-20):
|
||||
%CameraPivot.rotation.x = deg_to_rad(-20)
|
||||
if %CameraPivot.rotation.x < deg_to_rad(-80):
|
||||
%CameraPivot.rotation.x = deg_to_rad(-80)
|
||||
@@ -0,0 +1 @@
|
||||
uid://bbjxgsv6p27ly
|
||||
@@ -0,0 +1,94 @@
|
||||
[gd_scene format=3 uid="uid://0t1qprxnrxpw"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://bbjxgsv6p27ly" path="res://entities/mecha/mecha.gd" id="1_ariye"]
|
||||
[ext_resource type="PackedScene" uid="uid://hq2acth6vm2d" path="res://entities/mecha/assets/3d/mecha-body.blend" id="1_wfen8"]
|
||||
[ext_resource type="PackedScene" uid="uid://dhgclnvdm41nl" path="res://entities/mecha/mecha_leg.tscn" id="2_p6u1l"]
|
||||
[ext_resource type="Texture2D" uid="uid://dvgqy34aw6xfc" path="res://entities/mecha/assets/textures/pointer.svg" id="4_ua006"]
|
||||
[ext_resource type="Script" uid="uid://7s4jtqkpp21e" path="res://entities/mecha/weapons/gatling/gatling.gd" id="5_pfbkk"]
|
||||
|
||||
[sub_resource type="CylinderShape3D" id="CylinderShape3D_g4v7s"]
|
||||
height = 5.0075684
|
||||
radius = 2.546875
|
||||
|
||||
[node name="Mecha" type="CharacterBody3D" unique_id=608967332]
|
||||
axis_lock_linear_y = true
|
||||
axis_lock_angular_x = true
|
||||
axis_lock_angular_z = true
|
||||
motion_mode = 1
|
||||
script = ExtResource("1_ariye")
|
||||
max_speed = 20.0
|
||||
|
||||
[node name="Model" type="Node3D" parent="." unique_id=1153097662]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="mecha-body" parent="Model" unique_id=479724907 instance=ExtResource("1_wfen8")]
|
||||
transform = Transform3D(1.3113416e-07, 0, -1, 0, 1, 0, 1, 0, 1.3113416e-07, 0, 2, 0)
|
||||
|
||||
[node name="Leg1" parent="Model" unique_id=1161871766 instance=ExtResource("2_p6u1l")]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(-0.70710665, 0, -0.70710677, 0, 1, 0, 0.70710677, 0, -0.70710665, 0, 2, 0)
|
||||
step_target_path = NodePath("../StepTargets/Marker3D")
|
||||
|
||||
[node name="Leg2" parent="Model" unique_id=1040806054 instance=ExtResource("2_p6u1l")]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(0.70710677, 0, -0.70710665, 0, 1, 0, 0.70710665, 0, 0.70710677, 0, 2, 0)
|
||||
step_target_path = NodePath("../StepTargets/Marker3D2")
|
||||
|
||||
[node name="Leg3" parent="Model" unique_id=636817449 instance=ExtResource("2_p6u1l")]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(0.70710665, 0, 0.70710677, 0, 1, 0, -0.70710677, 0, 0.70710665, 0, 2, 0)
|
||||
step_target_path = NodePath("../StepTargets/Marker3D3")
|
||||
|
||||
[node name="Leg4" parent="Model" unique_id=373252400 instance=ExtResource("2_p6u1l")]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(-0.70710677, 0, 0.70710665, 0, 1, 0, -0.70710665, 0, -0.70710677, 0, 2, 0)
|
||||
step_target_path = NodePath("../StepTargets/Marker3D4")
|
||||
|
||||
[node name="StepTargets" type="Node3D" parent="Model" unique_id=1107229276]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="Marker3D" type="Marker3D" parent="Model/StepTargets" unique_id=1883887265]
|
||||
transform = Transform3D(-0.7071066, 0, -0.7071067, 0, 1, 0, 0.7071067, 0, -0.7071066, -2.1213202, 0, 2.1213205)
|
||||
|
||||
[node name="Marker3D2" type="Marker3D" parent="Model/StepTargets" unique_id=2083428784]
|
||||
transform = Transform3D(0.7071067, 0, -0.7071066, 0, 1, 0, 0.7071066, 0, 0.7071067, 2.1213205, 0, 2.1213202)
|
||||
|
||||
[node name="Marker3D3" type="Marker3D" parent="Model/StepTargets" unique_id=203630463]
|
||||
transform = Transform3D(0.7071066, 0, 0.7071067, 0, 1, 0, -0.7071067, 0, 0.7071066, 2.12132, 0, -2.1213207)
|
||||
|
||||
[node name="Marker3D4" type="Marker3D" parent="Model/StepTargets" unique_id=1646251219]
|
||||
transform = Transform3D(-0.7071067, 0, 0.7071066, 0, 1, 0, -0.7071066, 0, -0.7071067, -2.1213207, 0, -2.1213205)
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=781282910]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.5037842, 0)
|
||||
shape = SubResource("CylinderShape3D_g4v7s")
|
||||
|
||||
[node name="TargetContainer" type="Node" parent="." unique_id=857862335]
|
||||
|
||||
[node name="Target" type="Node3D" parent="TargetContainer" unique_id=871238190]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="Sprite3D" type="Sprite3D" parent="TargetContainer/Target" unique_id=328289766]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9376632, -0.07640457)
|
||||
modulate = Color(0.79607844, 0.2627451, 0.3647059, 1)
|
||||
pixel_size = 0.02
|
||||
billboard = 1
|
||||
no_depth_test = true
|
||||
texture = ExtResource("4_ua006")
|
||||
|
||||
[node name="CameraPivot" type="Node3D" parent="." unique_id=1668504271]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 0.8660253, 0.49999997, 0, -0.49999997, 0.8660253, 0, 0, 0)
|
||||
|
||||
[node name="Camera3D" type="Camera3D" parent="CameraPivot" unique_id=2082056518]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 50)
|
||||
|
||||
[node name="Inventory" type="Node3D" parent="." unique_id=1873054596]
|
||||
unique_name_in_owner = true
|
||||
|
||||
[node name="Gatling" type="Node" parent="Inventory" unique_id=2131873567]
|
||||
script = ExtResource("5_pfbkk")
|
||||
metadata/_custom_type_script = "uid://7s4jtqkpp21e"
|
||||
|
||||
[editable path="Model/mecha-body"]
|
||||
@@ -0,0 +1,32 @@
|
||||
@tool
|
||||
extends Node3D
|
||||
class_name MechaLeg
|
||||
|
||||
const STEP_DURATION = 0.15
|
||||
signal step
|
||||
|
||||
@export_node_path("Node3D") var step_target_path : NodePath
|
||||
@onready var local_target : Node3D = %LocalTarget
|
||||
|
||||
@export var step_distance: float = 5
|
||||
|
||||
@export var can_step = true
|
||||
|
||||
func _process(_delta):
|
||||
if step_target_path and can_step:
|
||||
var step_target : Node3D = get_node(step_target_path) as Node3D
|
||||
var dist := step_target.global_position.distance_to(local_target.global_position)
|
||||
if dist > step_distance:
|
||||
step.emit()
|
||||
tween_step(get_node(step_target_path).global_position)
|
||||
|
||||
|
||||
func tween_step(target_pos: Vector3):
|
||||
var tween = create_tween().set_trans(Tween.TRANS_LINEAR).set_ease(Tween.EASE_OUT)
|
||||
|
||||
tween.set_parallel(true)
|
||||
tween.tween_property(local_target, "global_position:x", target_pos.x, STEP_DURATION * 0.7)
|
||||
tween.tween_property(local_target, "global_position:z", target_pos.z, STEP_DURATION * 0.7)
|
||||
tween.tween_property(local_target, "global_position:y", target_pos.y + 1.5, STEP_DURATION * 0.5)
|
||||
tween.set_parallel(false)
|
||||
tween.tween_property(local_target, "global_position:y", target_pos.y, STEP_DURATION * 0.3)
|
||||
@@ -0,0 +1 @@
|
||||
uid://brd008shv85w7
|
||||
@@ -0,0 +1,57 @@
|
||||
[gd_scene format=3 uid="uid://dhgclnvdm41nl"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://cahdsj2xg25fy" path="res://entities/mecha/assets/3d/mecha-leg.blend" id="1_h7rhd"]
|
||||
[ext_resource type="Script" uid="uid://brd008shv85w7" path="res://entities/mecha/mecha_leg.gd" id="1_rf6lx"]
|
||||
|
||||
[node name="MechaLeg" type="Node3D" unique_id=1161871766]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -3.673074, 0.8926722, -2.4868906)
|
||||
script = ExtResource("1_rf6lx")
|
||||
step_target_path = NodePath("StepTarget")
|
||||
step_distance = 4.0
|
||||
|
||||
[node name="StepTarget" type="Marker3D" parent="." unique_id=1875541333]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, -2, 0)
|
||||
|
||||
[node name="mecha-leg" parent="." unique_id=597959552 instance=ExtResource("1_h7rhd")]
|
||||
transform = Transform3D(0.83249575, -0.55403143, 0, 0.55403143, 0.83249575, 0, 0, 0, 1, -0.018096328, 0, -0.013853073)
|
||||
|
||||
[node name="Skeleton3D" parent="mecha-leg/Armature" parent_id_path=PackedInt32Array(597959552, 1015042136) index="0" unique_id=1015525704]
|
||||
bones/0/rotation = Quaternion(-3.2671387e-08, -1.890937e-08, -0.86549115, 0.5009242)
|
||||
bones/0/scale = Vector3(0.99999994, 0.99999994, 1)
|
||||
bones/1/position = Vector3(7.566918e-08, 2, -1.2818292e-14)
|
||||
bones/1/rotation = Quaternion(-2.992432e-08, 6.2881918e-15, -0.39635947, 0.9180954)
|
||||
bones/1/scale = Vector3(1.0000002, 1.0000002, 1)
|
||||
bones/2/position = Vector3(6.1847814e-08, 2.1000001, 3.2634116e-14)
|
||||
bones/2/rotation = Quaternion(-2.8624317e-08, -1.0078329e-14, -0.3791404, 0.92533916)
|
||||
|
||||
[node name="Bone_001" parent="mecha-leg/Armature/Skeleton3D" index="0" unique_id=442116879]
|
||||
transform = Transform3D(-0.91758627, -0.39747998, 0.006730333, 0.39629143, -0.9132409, 0.094576165, -0.031445723, 0.089448966, 0.9954949, 1.6874223, -1.0735638, 0.008158923)
|
||||
|
||||
[node name="Bone" parent="mecha-leg/Armature/Skeleton3D" index="1" unique_id=1147044007]
|
||||
transform = Transform3D(-0.5367859, 0.84371114, -0.00349133, -0.8437184, -0.53678185, 0.0021121316, -9.205331e-05, 0.0040794616, 0.99999166, 0, 0, 0)
|
||||
|
||||
[node name="CCDIK3D" type="CCDIK3D" parent="mecha-leg/Armature/Skeleton3D" index="2" unique_id=720183381]
|
||||
angular_delta_limit = 0.606676447993229
|
||||
deterministic = true
|
||||
setting_count = 1
|
||||
settings/0/target_node = NodePath("../../../../Node/LocalTarget")
|
||||
settings/0/root_bone_name = "Bone"
|
||||
settings/0/root_bone = 0
|
||||
settings/0/end_bone_name = "Bone.002"
|
||||
settings/0/end_bone = 2
|
||||
settings/0/extend_end_bone = false
|
||||
settings/0/joint_count = 3
|
||||
settings/0/joints/0/rotation_axis = 3
|
||||
settings/0/joints/0/limitation = null
|
||||
settings/0/joints/1/rotation_axis = 3
|
||||
settings/0/joints/1/limitation = null
|
||||
settings/0/joints/2/rotation_axis = 3
|
||||
settings/0/joints/2/limitation = null
|
||||
|
||||
[node name="Node" type="Node" parent="." unique_id=196901171]
|
||||
|
||||
[node name="LocalTarget" type="Marker3D" parent="Node" unique_id=1076144472]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.3219225, -1.137534, -2.3036175)
|
||||
|
||||
[editable path="mecha-leg"]
|
||||
@@ -0,0 +1,24 @@
|
||||
extends Node3D
|
||||
class_name Bullet
|
||||
|
||||
const MAX_LIFETIME = 3.
|
||||
|
||||
var damage : float = 10.
|
||||
var speed : float = 150.
|
||||
var lifetime : float = 0.
|
||||
|
||||
@onready var raycast : RayCast3D = %RayCast3D
|
||||
|
||||
func _process(delta):
|
||||
lifetime += delta
|
||||
position += transform.basis * Vector3(0,0,-speed) * delta
|
||||
|
||||
if raycast.is_colliding():
|
||||
if raycast.get_collider() is Alien:
|
||||
raycast.get_collider().hit(damage)
|
||||
queue_free()
|
||||
if raycast.get_collider() is StaticBody3D:
|
||||
queue_free()
|
||||
|
||||
if lifetime > MAX_LIFETIME:
|
||||
queue_free()
|
||||
@@ -0,0 +1 @@
|
||||
uid://es5nf3pho7t1
|
||||
@@ -0,0 +1,28 @@
|
||||
[gd_scene format=3 uid="uid://da2dnjy802y1l"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://es5nf3pho7t1" path="res://entities/mecha/weapons/gatling/bullet/bullet.gd" id="1_s22gb"]
|
||||
|
||||
[sub_resource type="CapsuleMesh" id="CapsuleMesh_yf5fn"]
|
||||
radius = 0.328125
|
||||
height = 2.694336
|
||||
radial_segments = 4
|
||||
rings = 1
|
||||
|
||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_57qmd"]
|
||||
shading_mode = 0
|
||||
albedo_color = Color(0.99215686, 0.9372549, 0.56078434, 1)
|
||||
disable_receive_shadows = true
|
||||
|
||||
[node name="Bullet" type="Node3D" unique_id=226363088]
|
||||
script = ExtResource("1_s22gb")
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="." unique_id=564603597]
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, -1, 0, 1, -4.371139e-08, 0, 0, 0)
|
||||
mesh = SubResource("CapsuleMesh_yf5fn")
|
||||
surface_material_override/0 = SubResource("StandardMaterial3D_57qmd")
|
||||
|
||||
[node name="RayCast3D" type="RayCast3D" parent="." unique_id=888262706]
|
||||
unique_name_in_owner = true
|
||||
transform = Transform3D(1, 0, 0, 0, -4.371139e-08, 1, 0, -1, -4.371139e-08, 0, 0, -1.3228955)
|
||||
target_position = Vector3(0, -3, 0)
|
||||
collide_with_areas = true
|
||||
@@ -0,0 +1,49 @@
|
||||
extends Weapon
|
||||
class_name Gatling
|
||||
|
||||
const BULLET_SCENE : PackedScene = preload("res://entities/mecha/weapons/gatling/bullet/bullet.tscn")
|
||||
|
||||
var max_bullet_rate : float = 100.
|
||||
var min_bullet_rate : float = 1.
|
||||
var bullet_dispersion : float = 0.03
|
||||
var bullet_rate := min_bullet_rate
|
||||
var bullet_acc = 0.1
|
||||
var bullet_decc = 1.
|
||||
var time_shooting = 0.
|
||||
|
||||
func process_fire(delta : float, mecha : Mecha, shoot : bool) -> bool:
|
||||
if shoot:
|
||||
bullet_rate = lerp(
|
||||
bullet_rate,
|
||||
max_bullet_rate,
|
||||
min(bullet_acc * delta, 1)
|
||||
)
|
||||
else :
|
||||
bullet_rate = lerp(
|
||||
bullet_rate,
|
||||
min_bullet_rate,
|
||||
min(bullet_decc * delta, 1)
|
||||
)
|
||||
|
||||
time_shooting += delta
|
||||
|
||||
if shoot:
|
||||
for i in range(roundi(bullet_rate * time_shooting)):
|
||||
time_shooting -= 1/bullet_rate
|
||||
shoot_bullet(mecha)
|
||||
else :
|
||||
time_shooting = 0.
|
||||
return shoot
|
||||
|
||||
func shoot_bullet(mecha : Mecha,):
|
||||
var new_bullet : Bullet = BULLET_SCENE.instantiate()
|
||||
new_bullet.rotation.y = mecha.get_target_angle()
|
||||
new_bullet.position = mecha.get_projectile_spwan_point()
|
||||
mecha.add_recoil()
|
||||
add_child(new_bullet)
|
||||
new_bullet.rotation += Vector3(
|
||||
randf_range(-bullet_dispersion, bullet_dispersion),
|
||||
randf_range(-bullet_dispersion, bullet_dispersion),
|
||||
randf_range(-bullet_dispersion, bullet_dispersion)
|
||||
)
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://7s4jtqkpp21e
|
||||
@@ -0,0 +1,5 @@
|
||||
@abstract
|
||||
extends Node
|
||||
class_name Weapon
|
||||
|
||||
@abstract func process_fire(delta : float, mecha : Mecha, shoot : bool) -> bool
|
||||
@@ -0,0 +1 @@
|
||||
uid://cyonrs821lwwg
|
||||
@@ -0,0 +1,23 @@
|
||||
extends Node
|
||||
class_name GameGui
|
||||
|
||||
@export var mecha : Mecha
|
||||
|
||||
func _process(_delta):
|
||||
%FPSCount.text = "%d fps" % Engine.get_frames_per_second()
|
||||
if mecha:
|
||||
%HPProgressBar.value = lerp(
|
||||
%HPProgressBar.value,
|
||||
(mecha.hp / Mecha.MAX_HP) * 100.,
|
||||
0.5,
|
||||
)
|
||||
else:
|
||||
printerr("Missing mecha in GameGui")
|
||||
|
||||
func show_lose_gui():
|
||||
%LooseAnimationPlayer.play("Appear")
|
||||
|
||||
func _on_retry_button_pressed():
|
||||
get_tree().paused = false
|
||||
get_tree().reload_current_scene()
|
||||
|
||||