Merge pull request 'UI' (#32) from UI into master

Reviewed-on: #32
master
Dr. Sascha Woitschetzki 2024-02-02 10:23:23 +07:00
commit 85b02a457a
57 changed files with 1292 additions and 267 deletions

@ -1,6 +1,10 @@
<Project Sdk="Godot.NET.Sdk/4.2.0-beta.3">
<Project Sdk="Godot.NET.Sdk/4.3.0-dev.2">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
<RootNamespace>GodotspaceShooter</RootNamespace>
</PropertyGroup>
<ItemGroup>
<Folder Include="Scenes\" />
</ItemGroup>
</Project>

@ -1,6 +1,10 @@
<Project Sdk="Godot.NET.Sdk/4.2.0-beta.3">
<Project Sdk="Godot.NET.Sdk/4.3.0-dev">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading>
<RootNamespace>GodotspaceShooter</RootNamespace>
</PropertyGroup>
<ItemGroup>
<Folder Include="Scenes\" />
</ItemGroup>
</Project>

@ -1,6 +1,6 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Godot-space Shooter", "Godot-space Shooter.csproj", "{240DDE4D-DBD7-403E-B52D-F5962748425A}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Godot-space Shooter", "Godot-space Shooter.csproj", "{EDAECF90-1BC3-4D10-849B-57165567D656}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -9,11 +9,11 @@ Global
ExportRelease|Any CPU = ExportRelease|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{240DDE4D-DBD7-403E-B52D-F5962748425A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{240DDE4D-DBD7-403E-B52D-F5962748425A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{240DDE4D-DBD7-403E-B52D-F5962748425A}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
{240DDE4D-DBD7-403E-B52D-F5962748425A}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
{240DDE4D-DBD7-403E-B52D-F5962748425A}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
{240DDE4D-DBD7-403E-B52D-F5962748425A}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
{EDAECF90-1BC3-4D10-849B-57165567D656}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EDAECF90-1BC3-4D10-849B-57165567D656}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EDAECF90-1BC3-4D10-849B-57165567D656}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
{EDAECF90-1BC3-4D10-849B-57165567D656}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
{EDAECF90-1BC3-4D10-849B-57165567D656}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
{EDAECF90-1BC3-4D10-849B-57165567D656}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
EndGlobalSection
EndGlobal

@ -0,0 +1,3 @@
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=240DDE4D_002DDBD7_002D403E_002DB52D_002DF5962748425A_002Fd_003AScripts_002Ff_003APlayerShip_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=240DDE4D_002DDBD7_002D403E_002DB52D_002DF5962748425A_002Fd_003AScripts_002Ff_003AUi_002Ecs/@EntryIndexedValue">ExplicitlyExcluded</s:String></wpf:ResourceDictionary>

Binary file not shown.

After

Width:  |  Height:  |  Size: 348 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b3ucjch8b7rve"
path="res://.godot/imported/flair_disabled_cross.png-3df80847240f401e9a98a70fda1aee83.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/flair_disabled_cross.png"
dest_files=["res://.godot/imported/flair_disabled_cross.png-3df80847240f401e9a98a70fda1aee83.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://5lrd2y05neel"
path="res://.godot/imported/genericItem_color_087.png-6687afb309b9ba66de3b8f9ed90efe28.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/genericItem_color_087.png"
dest_files=["res://.godot/imported/genericItem_color_087.png-6687afb309b9ba66de3b8f9ed90efe28.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://34r8nb20e6y6"
path="res://.godot/imported/genericItem_white_102.png-95f126e969936aff31870ba984f94cba.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/genericItem_white_102.png"
dest_files=["res://.godot/imported/genericItem_white_102.png-95f126e969936aff31870ba984f94cba.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 604 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ddikd6m3t7prw"
path="res://.godot/imported/generic_arrow_3.png-604ef2420be555018c588cbcb3d8f7c6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/generic_arrow_3.png"
dest_files=["res://.godot/imported/generic_arrow_3.png-604ef2420be555018c588cbcb3d8f7c6.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bffseflkbu88e"
path="res://.godot/imported/generic_arrow_long.png-9035723ea35dbcfc24e22a18910772a7.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/generic_arrow_long.png"
dest_files=["res://.godot/imported/generic_arrow_long.png-9035723ea35dbcfc24e22a18910772a7.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 651 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dru38hr1dwoq8"
path="res://.godot/imported/generic_button_circle_fill.png-2b822fd87779eace62ffa3a06cff92b1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/generic_button_circle_fill.png"
dest_files=["res://.godot/imported/generic_button_circle_fill.png-2b822fd87779eace62ffa3a06cff92b1.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dtjx04y046dsl"
path="res://.godot/imported/generic_joystick_left.png-c24ad01f9de4be994998a95880b0f98d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/generic_joystick_left.png"
dest_files=["res://.godot/imported/generic_joystick_left.png-c24ad01f9de4be994998a95880b0f98d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cm7ru4t8ka3jn"
path="res://.godot/imported/keyboard_a.png-55bc9c150629b9f0992abde27a16be9c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/keyboard_a.png"
dest_files=["res://.godot/imported/keyboard_a.png-55bc9c150629b9f0992abde27a16be9c.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c5tms7y368pit"
path="res://.godot/imported/keyboard_any.png-2a9a0ec0e27526a6030a1d6924359c1a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/keyboard_any.png"
dest_files=["res://.godot/imported/keyboard_any.png-2a9a0ec0e27526a6030a1d6924359c1a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 233 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c4l1soqbo0rud"
path="res://.godot/imported/keyboard_arrows.png-3f6c0a61ced4c85ebba49ae5cc4a7159.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/keyboard_arrows.png"
dest_files=["res://.godot/imported/keyboard_arrows.png-3f6c0a61ced4c85ebba49ae5cc4a7159.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://uy20bgblsk4x"
path="res://.godot/imported/keyboard_d.png-895bd164acd04c40e6c184d6e2572823.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/keyboard_d.png"
dest_files=["res://.godot/imported/keyboard_d.png-895bd164acd04c40e6c184d6e2572823.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 398 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dojdjls5b310j"
path="res://.godot/imported/keyboard_enter.png-5856048a4e779616811153cc1f978fcb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/keyboard_enter.png"
dest_files=["res://.godot/imported/keyboard_enter.png-5856048a4e779616811153cc1f978fcb.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 385 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dh4l4vkgkjxup"
path="res://.godot/imported/keyboard_escape.png-dba48fc566cf07dae1d84ab68c431966.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/keyboard_escape.png"
dest_files=["res://.godot/imported/keyboard_escape.png-dba48fc566cf07dae1d84ab68c431966.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c2n36lnm2f5he"
path="res://.godot/imported/keyboard_s.png-5dc221fc8896155dff9a7e0fe05624ee.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/keyboard_s.png"
dest_files=["res://.godot/imported/keyboard_s.png-5dc221fc8896155dff9a7e0fe05624ee.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dkc2vx71bnhdh"
path="res://.godot/imported/keyboard_space.png-d31aec3c784ba7fccaaf4975d2bf5a49.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/keyboard_space.png"
dest_files=["res://.godot/imported/keyboard_space.png-d31aec3c784ba7fccaaf4975d2bf5a49.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 401 B

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bnh0rcsf30nrm"
path="res://.godot/imported/keyboard_w.png-48cdec668906ea6e1ec6fa0e40447b2b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/keyboard_w.png"
dest_files=["res://.godot/imported/keyboard_w.png-48cdec668906ea6e1ec6fa0e40447b2b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 100 125" enable-background="new 0 0 100 100" xml:space="preserve"><g><path d="M50.7,59.2c0.4,0,0.9-0.1,1.2-0.3l16.3-7.7c1.4-0.7,2-2.4,1.3-3.8l-0.7-1.5c-0.5-1-1.5-1.6-2.6-1.6c-0.4,0-0.9,0.1-1.3,0.3 l-12.2,5.7l-5.8-12.1c-0.5-1-1.5-1.6-2.6-1.6c-0.4,0-0.9,0.1-1.3,0.3l-1.5,0.7c-1.4,0.7-2,2.4-1.3,3.8L48,57.6 C48.5,58.5,49.6,59.2,50.7,59.2z"/><path d="M88.7,42.1C86.1,30,73.5,17.5,61.3,14.8c-2.7-0.6-5.4-0.9-8.1-0.9c-0.3,0-0.7,0-1,0c-17.7,0.5-32.8,14.1-34.9,31.8 l-0.1,0.4h-4.5c-0.8,0-1.3,0.5-1.5,1c-0.3,0.6-0.5,1.6,0,2.6l8,9.4c0.9,1,2.1,1.6,3.3,1.6c1.2,0,2.4-0.6,3.3-1.6l7.7-9.2 c0,0,0.1-0.1,0.1-0.1c0.1-0.1,0.1-0.1,0.2-0.2c0,0,0.1-0.1,0.1-0.1c0.5-0.9,0.3-1.9,0-2.5c-0.4-0.7-1-1.1-1.6-1.1h-4.9l0.1-0.6 c2.2-12.2,12.3-21,24.7-21.4c0.3,0,0.6,0,1,0h0.4c14,0.2,25.6,11.8,25.8,25.8c0.1,7-2.6,13.7-7.5,18.7c-5,5-11.6,7.8-18.7,7.8h-2.3 c-1.4,0-2.6,1.2-2.6,2.6v5.1c0,1.4,1.2,2.6,2.6,2.6h2.5c11,0,21.3-4.9,28.2-13.4C88.5,64.4,91.1,53.2,88.7,42.1z"/></g><text x="0" y="115" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">Created by Luis Rodrigues</text><text x="0" y="120" fill="#000000" font-size="5px" font-weight="bold" font-family="'Helvetica Neue', Helvetica, Arial-Unicode, Arial, Sans-serif">from the Noun Project</text></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

@ -0,0 +1,8 @@
[gd_resource type="LabelSettings" format=3 uid="uid://cdqcuhuk1yclm"]
[resource]
font_size = 200
outline_size = 5
outline_color = Color(1, 1, 0, 1)
shadow_size = 10
shadow_offset = Vector2(5, 5)

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -11,17 +11,14 @@
[sub_resource type="SphereShape3D" id="SphereShape3D_330dr"]
radius = 0.9
[node name="PlayerShip" type="Node3D" node_paths=PackedStringArray("cpulaser", "gpulaser", "jet", "PlayerRb", "shots", "healthBar")]
[node name="PlayerShip" type="Node3D" node_paths=PackedStringArray("jet", "rbPlayer", "shots")]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74227e-08, 0, -1, 0, 0, 0)
script = ExtResource("1_cpbf1")
cpulaser = NodePath("")
explosion = ExtResource("2_13dyf")
gpulaser = NodePath("")
jet = NodePath("RigidBody3D/Jet")
laser = ExtResource("9_kbdnc")
PlayerRb = NodePath("RigidBody3D")
rbPlayer = NodePath("RigidBody3D")
shots = NodePath("Shots")
healthBar = NodePath("ProgressBar")
[node name="RigidBody3D" type="RigidBody3D" parent="."]
mass = 100.0
@ -54,23 +51,3 @@ texture = ExtResource("4_87x8f")
current = true
[node name="Shots" type="Node3D" parent="."]
[node name="ProgressBar" type="ProgressBar" parent="."]
anchors_preset = 7
anchor_left = 0.5
anchor_top = 1.0
anchor_right = 0.5
anchor_bottom = 1.0
offset_left = -238.0
offset_top = -1241.0
offset_right = 251.0
offset_bottom = -1214.0
grow_horizontal = 2
grow_vertical = 0
size_flags_horizontal = 4
size_flags_vertical = 8
max_value = 10.0
step = 1.0
value = 7.0
rounded = true
show_percentage = false

@ -1,4 +1,4 @@
[gd_scene load_steps=19 format=3 uid="uid://det8556rpxhbv"]
[gd_scene load_steps=39 format=3 uid="uid://det8556rpxhbv"]
[ext_resource type="PackedScene" uid="uid://tlr55u0gn20l" path="res://Packed-Scenes/PlayerShip.tscn" id="1_njb5h"]
[ext_resource type="Texture2D" uid="uid://cg6n1hh3lj7rn" path="res://Textures/tile_nebula_green_dff.png" id="2_43vix"]
@ -14,10 +14,36 @@
[ext_resource type="AudioStream" uid="uid://bspwjmgsoxkbn" path="res://Sounds/gameover2.wav" id="9_rtdps"]
[ext_resource type="AudioStream" uid="uid://dlml6o3xscxqf" path="res://Sounds/weapon_player.wav" id="11_bbedd"]
[ext_resource type="Script" path="res://Scripts/GameArea.cs" id="11_p0rh7"]
[ext_resource type="Texture2D" uid="uid://b8gy1u2i0jkyd" path="res://Images/restart.svg" id="15_nxptg"]
[ext_resource type="Script" path="res://Scripts/InputManager.cs" id="15_uovst"]
[ext_resource type="Script" path="res://Scripts/Ui.cs" id="15_xl7yx"]
[ext_resource type="Texture2D" uid="uid://ddikd6m3t7prw" path="res://Images/generic_arrow_3.png" id="17_1t6sc"]
[ext_resource type="Texture2D" uid="uid://dtjx04y046dsl" path="res://Images/generic_joystick_left.png" id="17_q54dq"]
[ext_resource type="Texture2D" uid="uid://dru38hr1dwoq8" path="res://Images/generic_button_circle_fill.png" id="18_8e5pf"]
[ext_resource type="Texture2D" uid="uid://bffseflkbu88e" path="res://Images/generic_arrow_long.png" id="18_b2vca"]
[ext_resource type="Texture2D" uid="uid://5lrd2y05neel" path="res://Images/genericItem_color_087.png" id="18_rfbsj"]
[ext_resource type="Texture2D" uid="uid://c4l1soqbo0rud" path="res://Images/keyboard_arrows.png" id="19_dpw4m"]
[ext_resource type="Texture2D" uid="uid://34r8nb20e6y6" path="res://Images/genericItem_white_102.png" id="19_hyybv"]
[ext_resource type="Texture2D" uid="uid://bnh0rcsf30nrm" path="res://Images/keyboard_w.png" id="20_3aqu5"]
[ext_resource type="Texture2D" uid="uid://b3ucjch8b7rve" path="res://Images/flair_disabled_cross.png" id="21_7mvgi"]
[ext_resource type="Texture2D" uid="uid://cm7ru4t8ka3jn" path="res://Images/keyboard_a.png" id="21_of2rn"]
[ext_resource type="Texture2D" uid="uid://c2n36lnm2f5he" path="res://Images/keyboard_s.png" id="22_1rcux"]
[ext_resource type="Texture2D" uid="uid://uy20bgblsk4x" path="res://Images/keyboard_d.png" id="23_o81a8"]
[ext_resource type="Texture2D" uid="uid://dkc2vx71bnhdh" path="res://Images/keyboard_space.png" id="24_cuten"]
[ext_resource type="Texture2D" uid="uid://dojdjls5b310j" path="res://Images/keyboard_enter.png" id="25_u4r31"]
[ext_resource type="Texture2D" uid="uid://dh4l4vkgkjxup" path="res://Images/keyboard_escape.png" id="26_oxfmw"]
[ext_resource type="LabelSettings" uid="uid://cdqcuhuk1yclm" path="res://Material/lblSettingsCountdown.tres" id="27_0p8jc"]
[ext_resource type="Texture2D" uid="uid://c5tms7y368pit" path="res://Images/keyboard_any.png" id="28_g1v6s"]
[sub_resource type="BoxShape3D" id="BoxShape3D_bw288"]
[sub_resource type="LabelSettings" id="LabelSettings_vf3s8"]
font_size = 50
font_color = Color(0.233592, 0.506913, 1, 1)
outline_size = 3
outline_color = Color(0, 1, 0.00392157, 1)
shadow_size = 10
shadow_offset = Vector2(5, 5)
[sub_resource type="InputEventKey" id="InputEventKey_gjrl7"]
device = -1
keycode = 4194309
@ -25,18 +51,34 @@ keycode = 4194309
[sub_resource type="Shortcut" id="Shortcut_soxs4"]
events = [SubResource("InputEventKey_gjrl7")]
[sub_resource type="LabelSettings" id="LabelSettings_dqsad"]
font_size = 50
font_color = Color(1, 0, 0, 1)
outline_size = 3
outline_color = Color(1, 0.999986, 0.00293482, 1)
shadow_size = 10
shadow_offset = Vector2(5, 5)
[node name="SpaceShooter" type="Node3D"]
process_mode = 3
[node name="PlayerShip" parent="." instance=ExtResource("1_njb5h")]
[node name="PlayerShip" parent="." node_paths=PackedStringArray("jet", "rbPlayer", "shots") instance=ExtResource("1_njb5h")]
process_mode = 1
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74227e-08, 0, -1, 0, 0, 5)
jet = NodePath("RigidBody3D/Jet")
rbPlayer = NodePath("RigidBody3D")
shots = NodePath("Shots")
[node name="Camera3D" type="Camera3D" parent="."]
process_mode = 1
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 8.8, 0)
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
process_mode = 1
transform = Transform3D(1, 0, 0, 0, 0.707106, 0.707106, 0, -0.707106, 0.707106, 10, 10, 10)
[node name="Background" type="Sprite3D" parent="."]
process_mode = 1
transform = Transform3D(1.1, 0, 0, 0, -4.80825e-08, -1, 0, 1.1, -4.37114e-08, 0, -0.5, 0)
billboard = 1
shaded = true
@ -46,7 +88,11 @@ region_enabled = true
region_rect = Rect2(0, 0, 810, 1380)
script = ExtResource("3_imgbw")
[node name="Asteroids" type="Node3D" parent="."]
process_mode = 1
[node name="GameArea" type="Node3D" parent="."]
process_mode = 1
script = ExtResource("11_p0rh7")
[node name="Bottom" type="RigidBody3D" parent="GameArea"]
@ -80,6 +126,7 @@ transform = Transform3D(15, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0)
shape = SubResource("BoxShape3D_bw288")
[node name="SoundManager" type="Node" parent="." node_paths=PackedStringArray("backgroundMusic", "gameOverMusic", "asteroidExplosionSound", "playerExplosionSound", "laserSound")]
process_mode = 1
script = ExtResource("8_4ksf0")
backgroundMusic = NodePath("BackgroundMusic")
gameOverMusic = NodePath("GameOverMusic")
@ -103,118 +150,331 @@ stream = ExtResource("9_rtdps")
[node name="LaserSound" type="AudioStreamPlayer3D" parent="SoundManager"]
stream = ExtResource("11_bbedd")
[node name="GameManager" type="Node" parent="." node_paths=PackedStringArray("asteroidsContainer", "labelAsteroids", "labelLevel", "labelLifes", "labelNextLevel", "labelPoints", "labelDebug", "labelGameOver", "restartButton", "reachedPointsLabel")]
[node name="GameManager" type="Node" parent="." node_paths=PackedStringArray("asteroidsContainer")]
process_mode = 1
script = ExtResource("9_rsrr5")
debug = false
asteroids = Array[PackedScene]([ExtResource("5_do6ba"), ExtResource("6_tqoe7"), ExtResource("7_v6ul2")])
asteroidsContainer = NodePath("../Asteroids")
labelAsteroids = NodePath("../Control/LabelAsteroids")
labelLevel = NodePath("../Control/LabelLevel")
labelLifes = NodePath("../Control/LabelLives")
labelNextLevel = NodePath("../Control/LabelNextLevel")
labelPoints = NodePath("../Control/LabelPoints")
labelDebug = NodePath("../Control/LabelDebug")
labelGameOver = NodePath("../Control/LabelGameOver")
restartButton = NodePath("../Control/RestartButton")
reachedPointsLabel = NodePath("../Control/ReachedPointsLabel")
[node name="Asteroids" type="Node3D" parent="."]
[node name="InputManager" type="Node" parent="."]
process_mode = 3
script = ExtResource("15_uovst")
[node name="Ui" type="Node2D" parent="." node_paths=PackedStringArray("lblLevel", "lblPoints", "barHealth", "barLevel", "vBoxGameOver", "lblGameOver", "butGameOverRestart", "lblReachedPoints", "butGameOverExit", "vBoxPause", "buttonResume", "buttonPauseRestart", "butPauseExit", "vBoxCountdown", "lblCountdown", "textAnyKey", "lblAnyKey")]
process_mode = 3
script = ExtResource("15_xl7yx")
lblLevel = NodePath("HBoxTop/VBoxStats/lblLevel")
lblPoints = NodePath("HBoxTop/VBoxStats/lblPoints")
barHealth = NodePath("HBoxTop/VBoxBars/barHealth")
barLevel = NodePath("HBoxTop/VBoxBars/barProgress")
vBoxGameOver = NodePath("VBoxGameOver")
lblGameOver = NodePath("VBoxGameOver/lblGameOver")
butGameOverRestart = NodePath("VBoxGameOver/butGameOverRestart")
lblReachedPoints = NodePath("VBoxGameOver/lblReachedPoints")
butGameOverExit = NodePath("VBoxGameOver/butGameOverExit")
vBoxPause = NodePath("VBoxPause")
buttonResume = NodePath("VBoxPause/ButtonResume")
buttonPauseRestart = NodePath("VBoxPause/butPauseRestart")
butPauseExit = NodePath("VBoxPause/butPauseExit")
vBoxCountdown = NodePath("VBoxCountdown")
lblCountdown = NodePath("VBoxCountdown/lblCountdown")
textAnyKey = NodePath("VBoxCountdown/textPressKey")
lblAnyKey = NodePath("VBoxCountdown/lblPressKey")
[node name="HBoxTop" type="HBoxContainer" parent="Ui"]
custom_minimum_size = Vector2(700, 0)
anchors_preset = 5
anchor_left = 0.5
anchor_right = 0.5
offset_left = 50.0
offset_top = 50.0
offset_right = 754.0
offset_bottom = 104.0
grow_horizontal = 2
[node name="VBoxIconsLevelPoints" type="VBoxContainer" parent="Ui/HBoxTop"]
custom_minimum_size = Vector2(50, 50)
layout_mode = 2
tooltip_text = "10 / 10"
[node name="textLevel" type="TextureRect" parent="Ui/HBoxTop/VBoxIconsLevelPoints"]
custom_minimum_size = Vector2(25, 25)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
texture = ExtResource("17_q54dq")
expand_mode = 4
[node name="textPoints" type="TextureRect" parent="Ui/HBoxTop/VBoxIconsLevelPoints"]
custom_minimum_size = Vector2(25, 25)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
texture = ExtResource("18_8e5pf")
expand_mode = 4
[node name="VBoxStats" type="VBoxContainer" parent="Ui/HBoxTop"]
layout_mode = 2
[node name="lblLevel" type="Label" parent="Ui/HBoxTop/VBoxStats"]
layout_mode = 2
size_flags_vertical = 1
text = "1"
horizontal_alignment = 2
vertical_alignment = 1
[node name="lblPoints" type="Label" parent="Ui/HBoxTop/VBoxStats"]
layout_mode = 2
size_flags_vertical = 1
text = "0"
horizontal_alignment = 2
[node name="VBoxIconsLifeLevel" type="VBoxContainer" parent="Ui/HBoxTop"]
custom_minimum_size = Vector2(50, 50)
layout_mode = 2
tooltip_text = "10 / 10"
[node name="textLife" type="TextureRect" parent="Ui/HBoxTop/VBoxIconsLifeLevel"]
custom_minimum_size = Vector2(25, 25)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
texture = ExtResource("19_hyybv")
expand_mode = 4
[node name="Control" type="Control" parent="."]
layout_mode = 3
anchors_preset = 0
offset_right = 40.0
offset_bottom = 40.0
[node name="LabelAsteroids" type="RichTextLabel" parent="Control"]
layout_mode = 2
offset_left = 20.0
offset_top = 20.0
offset_right = 260.0
offset_bottom = 40.0
text = "Asteroids: 0"
scroll_active = false
shortcut_keys_enabled = false
[node name="LabelLives" type="RichTextLabel" parent="Control"]
layout_mode = 2
offset_left = 20.0
offset_top = 40.0
offset_right = 260.0
offset_bottom = 60.0
text = "Lives: 3"
scroll_active = false
shortcut_keys_enabled = false
[node name="LabelPoints" type="RichTextLabel" parent="Control"]
layout_mode = 2
offset_left = 20.0
offset_top = 60.0
offset_right = 260.0
offset_bottom = 80.0
text = "Points: 0"
scroll_active = false
shortcut_keys_enabled = false
[node name="LabelLevel" type="RichTextLabel" parent="Control"]
layout_mode = 2
offset_left = 20.0
offset_top = 80.0
offset_right = 260.0
offset_bottom = 100.0
text = "Level: 1"
scroll_active = false
shortcut_keys_enabled = false
[node name="LabelNextLevel" type="RichTextLabel" parent="Control"]
layout_mode = 2
offset_left = 20.0
offset_top = 100.0
offset_right = 260.0
offset_bottom = 120.0
text = "Next Level: 10"
scroll_active = false
shortcut_keys_enabled = false
[node name="LabelDebug" type="RichTextLabel" parent="Control"]
layout_mode = 2
offset_left = 543.0
offset_top = 1225.0
offset_right = 783.0
offset_bottom = 1245.0
scale = Vector2(1, 1.88)
bbcode_enabled = true
text = "[right][color=red]Debug[/color][/right]"
scroll_active = false
shortcut_keys_enabled = false
[node name="LabelGameOver" type="RichTextLabel" parent="Control"]
layout_mode = 2
offset_left = 12.0
offset_top = 437.0
offset_right = 230.0
offset_bottom = 460.0
scale = Vector2(3.6, 7.48)
bbcode_enabled = true
text = "[center][shake rate=30 level=10 connected=1][rainbow freq=1.0 sat=0.8 val=0.8]Game Over[/rainbow][/shake][/center]"
scroll_active = false
shortcut_keys_enabled = false
[node name="RestartButton" type="Button" parent="Control"]
layout_mode = 0
offset_left = 354.0
offset_top = 644.0
offset_right = 462.0
offset_bottom = 777.0
[node name="textProgress" type="TextureRect" parent="Ui/HBoxTop/VBoxIconsLifeLevel"]
custom_minimum_size = Vector2(25, 25)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
texture = ExtResource("18_rfbsj")
expand_mode = 4
[node name="VBoxBars" type="VBoxContainer" parent="Ui/HBoxTop"]
layout_mode = 2
size_flags_horizontal = 3
tooltip_text = "10 / 10"
[node name="barHealth" type="ProgressBar" parent="Ui/HBoxTop/VBoxBars"]
layout_mode = 2
size_flags_vertical = 3
max_value = 10.0
value = 10.0
rounded = true
show_percentage = false
[node name="barProgress" type="ProgressBar" parent="Ui/HBoxTop/VBoxBars"]
layout_mode = 2
size_flags_vertical = 3
max_value = 10.0
value = 10.0
rounded = true
show_percentage = false
[node name="VBoxCountdown" type="VBoxContainer" parent="Ui"]
offset_left = 326.0
offset_top = 429.0
offset_right = 492.0
offset_bottom = 797.0
size_flags_horizontal = 4
size_flags_vertical = 4
alignment = 1
[node name="lblCountdown" type="Label" parent="Ui/VBoxCountdown"]
visible = false
layout_mode = 2
size_flags_horizontal = 4
text = "3"
label_settings = ExtResource("27_0p8jc")
horizontal_alignment = 1
vertical_alignment = 1
[node name="textPressKey" type="TextureRect" parent="Ui/VBoxCountdown"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
texture = ExtResource("28_g1v6s")
stretch_mode = 2
[node name="lblPressKey" type="Label" parent="Ui/VBoxCountdown"]
layout_mode = 2
size_flags_horizontal = 4
text = "Press any key to start"
horizontal_alignment = 1
vertical_alignment = 1
[node name="VBoxPause" type="VBoxContainer" parent="Ui"]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = 205.0
offset_top = 451.0
offset_right = 613.0
offset_bottom = 672.0
grow_horizontal = 2
grow_vertical = 2
[node name="LabelPause" type="Label" parent="Ui/VBoxPause"]
layout_mode = 2
text = "Pause"
label_settings = SubResource("LabelSettings_vf3s8")
horizontal_alignment = 1
vertical_alignment = 1
[node name="ButtonResume" type="Button" parent="Ui/VBoxPause"]
custom_minimum_size = Vector2(200, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
button_mask = 5
text = "Resume
"
icon = ExtResource("18_b2vca")
[node name="butPauseRestart" type="Button" parent="Ui/VBoxPause"]
custom_minimum_size = Vector2(200, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
button_mask = 5
shortcut = SubResource("Shortcut_soxs4")
text = "Restart"
icon = ExtResource("17_1t6sc")
[node name="butPauseExit" type="Button" parent="Ui/VBoxPause"]
process_mode = 3
custom_minimum_size = Vector2(200, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
button_mask = 5
shortcut = SubResource("Shortcut_soxs4")
icon = ExtResource("15_nxptg")
icon_alignment = 1
[node name="ReachedPointsLabel" type="RichTextLabel" parent="Control"]
layout_mode = 0
offset_left = 173.0
offset_top = 600.0
offset_right = 652.0
offset_bottom = 626.0
bbcode_enabled = true
text = "[center]You have reached level 1 and 0 points![/center]"
text = "Exit"
icon = ExtResource("21_7mvgi")
[node name="VBoxGameOver" type="VBoxContainer" parent="Ui"]
process_mode = 3
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = 201.0
offset_top = 451.0
offset_right = 609.0
offset_bottom = 749.0
grow_horizontal = 2
grow_vertical = 2
[node name="lblGameOver" type="Label" parent="Ui/VBoxGameOver"]
layout_mode = 2
text = "Game Over"
label_settings = SubResource("LabelSettings_dqsad")
horizontal_alignment = 1
vertical_alignment = 1
[node name="lblReachedPoints" type="Label" parent="Ui/VBoxGameOver"]
custom_minimum_size = Vector2(0, 100)
layout_mode = 2
text = "You have reached level 1 and 0 points!"
horizontal_alignment = 1
vertical_alignment = 1
autowrap_mode = 3
[node name="butGameOverRestart" type="Button" parent="Ui/VBoxGameOver"]
custom_minimum_size = Vector2(200, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
button_mask = 5
shortcut = SubResource("Shortcut_soxs4")
text = "Restart"
icon = ExtResource("17_1t6sc")
[node name="butGameOverExit" type="Button" parent="Ui/VBoxGameOver"]
process_mode = 3
custom_minimum_size = Vector2(200, 0)
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 6
button_mask = 5
shortcut = SubResource("Shortcut_soxs4")
text = "Exit"
icon = ExtResource("21_7mvgi")
[node name="BoxHelp" type="BoxContainer" parent="Ui"]
anchors_preset = 3
anchor_left = 1.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_left = 633.0
offset_top = 1064.0
offset_right = 785.0
offset_bottom = 1264.0
grow_horizontal = 0
grow_vertical = 0
[node name="VBoxHelp" type="VBoxContainer" parent="Ui/BoxHelp"]
layout_mode = 2
[node name="HBoxMovement" type="HBoxContainer" parent="Ui/BoxHelp/VBoxHelp"]
layout_mode = 2
[node name="TextureArrowKeys" type="TextureRect" parent="Ui/BoxHelp/VBoxHelp/HBoxMovement"]
layout_mode = 2
texture = ExtResource("19_dpw4m")
[node name="TextureW" type="TextureRect" parent="Ui/BoxHelp/VBoxHelp/HBoxMovement"]
visible = false
layout_mode = 2
texture = ExtResource("20_3aqu5")
[node name="TextureA" type="TextureRect" parent="Ui/BoxHelp/VBoxHelp/HBoxMovement"]
visible = false
layout_mode = 2
texture = ExtResource("21_of2rn")
[node name="TextureS" type="TextureRect" parent="Ui/BoxHelp/VBoxHelp/HBoxMovement"]
visible = false
layout_mode = 2
texture = ExtResource("22_1rcux")
[node name="TextureD" type="TextureRect" parent="Ui/BoxHelp/VBoxHelp/HBoxMovement"]
visible = false
layout_mode = 2
texture = ExtResource("23_o81a8")
[node name="lblMovement" type="Label" parent="Ui/BoxHelp/VBoxHelp/HBoxMovement"]
layout_mode = 2
text = "Movement
"
[node name="HBoxShooting" type="HBoxContainer" parent="Ui/BoxHelp/VBoxHelp"]
layout_mode = 2
[node name="TextureSpace" type="TextureRect" parent="Ui/BoxHelp/VBoxHelp/HBoxShooting"]
layout_mode = 2
texture = ExtResource("24_cuten")
[node name="TextureEnter" type="TextureRect" parent="Ui/BoxHelp/VBoxHelp/HBoxShooting"]
visible = false
layout_mode = 2
texture = ExtResource("25_u4r31")
[node name="lblShooting" type="Label" parent="Ui/BoxHelp/VBoxHelp/HBoxShooting"]
layout_mode = 2
text = "Shooting"
[node name="HBoxPause" type="HBoxContainer" parent="Ui/BoxHelp/VBoxHelp"]
layout_mode = 2
[node name="TexturePause" type="TextureRect" parent="Ui/BoxHelp/VBoxHelp/HBoxPause"]
layout_mode = 2
texture = ExtResource("26_oxfmw")
[node name="lblPause" type="Label" parent="Ui/BoxHelp/VBoxHelp/HBoxPause"]
layout_mode = 2
text = "Pause"

@ -1,6 +1,6 @@
using Godot;
namespace Scripts;
namespace GodotspaceShooter.Scripts;
[GlobalClass]
public partial class Asteroid : Node3D {

@ -1,9 +1,9 @@
using Godot;
namespace Scripts;
namespace GodotspaceShooter.Scripts;
public partial class Background : Sprite3D {
[Export] private float moveVelocity = -250f;
private const float moveVelocity = -250f;
public override void _Process(double delta) {
Rect2 region = RegionRect;

@ -1,5 +1,7 @@
using Godot;
namespace GodotspaceShooter.Scripts;
public partial class Explosion : GpuParticles3D {
public override void _Process(double delta) {
if (!Emitting) QueueFree();

@ -1,3 +1,5 @@
using Godot;
namespace GodotspaceShooter.Scripts;
public partial class GameArea : Node3D { }

@ -1,41 +1,44 @@
using System;
using Godot;
using Godot.Collections;
namespace Scripts;
namespace GodotspaceShooter.Scripts;
public partial class GameManager : Node {
private int asteroidMaxNumber = 3;
private int asteroidNumber;
public bool GameOver { get; private set; }
[Export] private bool debug = true;
private bool gameOver;
public bool GameOver {
get => gameOver;
private set {
gameOver = value;
SoundManager.Instance.Stop(SoundManager.Sound.BackgroundMusic);
SoundManager.Instance.Play(SoundManager.Sound.GameOver);
OnGameOver?.Invoke(this,EventArgs.Empty);
}
}
[Export] private Array<PackedScene> asteroids;
[Export] private Node3D asteroidsContainer;
[Export] private RichTextLabel labelAsteroids;
[Export] private RichTextLabel labelLevel;
[Export] private RichTextLabel labelLifes;
[Export] private RichTextLabel labelNextLevel;
[Export] private RichTextLabel labelPoints;
[Export] private RichTextLabel labelDebug;
[Export] private RichTextLabel labelGameOver;
[Export] private Button restartButton;
[Export] private RichTextLabel reachedPointsLabel;
private int level = 1;
public int MaxLives { get; private set; } = 10;
private int lives = 10;
private int nextLevelPoints = 11;
private int points;
private float spawnRate = 1f;
private float spawnTimer;
public event EventHandler OnRefreshStats;
public event EventHandler OnNewCountdown;
public event EventHandler OnGameOver;
public int AsteroidNumber {
get => asteroidNumber;
set {
asteroidNumber = value;
RefreshUi();
OnRefreshStats?.Invoke(this, EventArgs.Empty);
}
}
@ -43,9 +46,8 @@ public partial class GameManager : Node {
get => lives;
set {
lives = value;
if (lives <= 0) SetGameOver();
RefreshUi();
PlayerShip.Instance.RefreshUi();
if (lives <= 0) GameOver = true;
OnRefreshStats?.Invoke(this, EventArgs.Empty);
}
}
@ -54,7 +56,7 @@ public partial class GameManager : Node {
set {
points = value;
if (points >= nextLevelPoints) NextLevel();
RefreshUi();
OnRefreshStats?.Invoke(this, EventArgs.Empty);
}
}
@ -62,15 +64,17 @@ public partial class GameManager : Node {
get => level;
private set {
level = value;
RefreshUi();
OnRefreshStats?.Invoke(this, EventArgs.Empty);
}
}
public int LastLevelPoints { get; private set; }
private int NextLevelPoints {
public int NextLevelPoints {
get => nextLevelPoints;
set {
private set {
nextLevelPoints = value;
RefreshUi();
OnRefreshStats?.Invoke(this, EventArgs.Empty);
}
}
@ -78,32 +82,50 @@ public partial class GameManager : Node {
get => asteroidMaxNumber;
set {
asteroidMaxNumber = value;
RefreshUi();
OnRefreshStats?.Invoke(this, EventArgs.Empty);
}
}
public static GameManager Instance { get; private set; }
private bool gamePaused;
public bool GamePaused{
get => gamePaused;
set {
gamePaused = value;
GetTree().Paused = gamePaused;
OnRefreshStats?.Invoke(this, EventArgs.Empty);
}
}
private bool countdown;
public bool Countdown {
get => countdown;
set {
countdown = value;
if (countdown) OnNewCountdown?.Invoke(this, EventArgs.Empty);
}
}
public static GameManager Instance { get; private set; }
[Export] public bool Debug { get; private set; } = true;
public override void _Ready() {
Instance = this;
Lives = MaxLives;
spawnTimer = spawnRate;
Countdown = true;
SoundManager.Instance.Play(SoundManager.Sound.BackgroundMusic);
restartButton.Pressed += RestartButtonOnPressed;
RefreshUi();
PlayerShip.Instance.RefreshUi();
}
private void RestartButtonOnPressed() => GetTree().ReloadCurrentScene();
public override void _Process(double delta) {
spawnTimer -= (float)delta;
if (spawnTimer < 0) {
if (AsteroidNumber < asteroidMaxNumber) SpawnNewAsteroid();
spawnTimer = spawnRate;
if (!GamePaused && !Countdown) {
spawnTimer -= (float)delta;
if (spawnTimer < 0) {
if (AsteroidNumber < asteroidMaxNumber) SpawnNewAsteroid();
spawnTimer = spawnRate;
}
}
}
private void SpawnNewAsteroid() {
if (GameOver) return;
GD.Print("Spawn new asteroid");
@ -113,34 +135,12 @@ public partial class GameManager : Node {
asteroid.Name = $"Asteroid{AsteroidNumber}";
}
private void RefreshUi() {
labelLifes.Text = $"Lives: {lives}";
labelAsteroids.Text = $"Asteroids: {asteroidNumber} / {asteroidMaxNumber}";
labelPoints.Text = $"Points: {points}";
labelNextLevel.Text = $"Next Level at: {NextLevelPoints}";
labelLevel.Text = $"Actual Level: {Level}";
labelDebug.Visible = debug;
labelGameOver.Visible = GameOver;
restartButton.Visible = GameOver;
reachedPointsLabel.Visible = GameOver;
}
private void NextLevel() {
GD.Print("Next Level!");
Ui.ShowMessage("Next Level!");
Level++;
LastLevelPoints = NextLevelPoints;
NextLevelPoints = Level * 33;
AsteroidMaxNumber = 3 + Level;
spawnRate = 1f - Level * 0.1f;
}
public void OnGameAreaBodyExited(Node body) {
GD.Print($"{body.Name} leaved GameArea!");
}
private void SetGameOver() {
GameOver = true;
reachedPointsLabel.Text = $"[center]You have reached level {Level} and {Points} points![/center]";
SoundManager.Instance.Stop(SoundManager.Sound.BackgroundMusic);
SoundManager.Instance.Play(SoundManager.Sound.GameOver);
}
}
}

@ -0,0 +1,56 @@
using System;
using Godot;
namespace GodotspaceShooter.Scripts;
public partial class InputManager : Node
{
private const string GAME_PAUSE = "Game_Pause";
private const string PLAYER_MOVE_FORWARD = "Player_Move_Forward";
private const string PLAYER_MOVE_BACKWARDS = "Player_Move_Backwards";
private const string PLAYER_MOVE_LEFT = "Player_Move_Left";
private const string PLAYER_MOVE_RIGHT = "Player_Move_Right";
private const string PLAYER_FIRE = "Player_Fire";
private Vector3 moveDirection;
private Vector3 rotationDirection;
public event EventHandler StartCountdown;
public static InputManager Instance { get; private set; }
public override void _Ready() => Instance = this;
public override void _UnhandledInput(InputEvent @event) {
//Countdown
if (GameManager.Instance.Countdown && Input.IsAnythingPressed()) StartCountdown?.Invoke(this,EventArgs.Empty);
//Pause
if (Input.IsActionJustReleased(GAME_PAUSE)) GameManager.Instance.GamePaused = GameManager.Instance.GamePaused switch { true => false, false => true };
if (GameManager.Instance.GamePaused || GameManager.Instance.Countdown || GameManager.Instance.GameOver) return;
//Movement
float moveVelocity = PlayerShip.Instance.MoveVelocity;
float rotationVelocity = PlayerShip.Instance.RotationVelocity;
moveDirection = Vector3.Zero;
rotationDirection = Vector3.Zero;
if (Input.IsActionPressed(PLAYER_MOVE_FORWARD)) moveDirection.Z = -moveVelocity;
if (Input.IsActionJustPressed(PLAYER_MOVE_FORWARD)) rotationDirection.X = -rotationVelocity;
if (Input.IsActionPressed(PLAYER_MOVE_BACKWARDS)) moveDirection.Z = +moveVelocity;
if (Input.IsActionJustPressed(PLAYER_MOVE_BACKWARDS)) rotationDirection.X = +rotationVelocity;
if (Input.IsActionPressed(PLAYER_MOVE_LEFT)) moveDirection.X = -moveVelocity;
if (Input.IsActionJustPressed(PLAYER_MOVE_LEFT)) rotationDirection.Z = -rotationVelocity * 2;
if (Input.IsActionPressed(PLAYER_MOVE_RIGHT)) moveDirection.X = moveVelocity;
if (Input.IsActionJustPressed(PLAYER_MOVE_RIGHT)) rotationDirection.Z = +rotationVelocity * 2;
if (Input.IsActionJustReleased(PLAYER_MOVE_LEFT) || Input.IsActionJustReleased(PLAYER_MOVE_RIGHT)) rotationDirection = Vector3.Zero;
PlayerShip.Instance.MoveDirection = moveDirection;
PlayerShip.Instance.RotationDirection = rotationDirection;
//Shooting
if (Input.IsActionJustPressed(PLAYER_FIRE)) PlayerShip.Instance.Shooting = true;
// if (Input.IsActionJustReleased(PLAYER_FIRE)) PlayerShip.Instance.Shooting = false;
}
}

@ -1,5 +1,7 @@
using Godot;
namespace GodotspaceShooter.Scripts;
public partial class LaserBeam : Node3D {
[Export] private RigidBody3D rigidBody;
private float speed = 10f;

@ -1,34 +1,25 @@
using Godot;
namespace Scripts;
namespace GodotspaceShooter.Scripts;
public partial class PlayerShip : Node3D {
private const float jetTimerMax = 0.5f;
private const float laserTimerMax = 1f;
private const string PLAYER_MOVE_FORWARD = "Player_Move_Forward";
private const string PLAYER_MOVE_BACKWARDS = "Player_Move_Backwards";
private const string PLAYER_MOVE_LEFT = "Player_Move_Left";
private const string PLAYER_MOVE_RIGHT = "Player_Move_Right";
private const string PLAYER_FIRE = "Player_Fire";
[Export] private CpuParticles3D cpulaser;
[Export] private PackedScene explosion;
[Export] private GpuParticles3D gpulaser;
[Export] private Node3D jet;
private float jetTimer = jetTimerMax;
[Export] private PackedScene laser;
[Export] private RigidBody3D rbPlayer;
[Export] private Node3D shots;
private const float jetTimerMax = 0.5f;
private const float laserTimerMax = 1f;
private float laserTimer = laserTimerMax;
private float jetTimer = jetTimerMax;
private Vector3 moveDir;
[Export] private float moveVelocity = 10f;
[Export] public RigidBody3D PlayerRb;
private Vector3 rotDir;
[Export] private float rotVelocity = 15f;
private bool shooting;
[Export] private Node3D shots;
public float MoveVelocity { get; private set; } = 10f;
public float RotationVelocity { get; private set; } = 15f;
[Export] private ProgressBar healthBar;
public Vector3 MoveDirection { get; set; }
public Vector3 RotationDirection { get; set; }
public bool Shooting { get; set; }
public static PlayerShip Instance { get; private set; }
@ -37,42 +28,21 @@ public partial class PlayerShip : Node3D {
Instance = this;
}
public void RefreshUi() {
healthBar.MaxValue = GameManager.Instance.MaxLives;
healthBar.Value = GameManager.Instance.Lives;
}
public override void _Process(double delta) {
if (GameManager.Instance.GameOver) return;
moveDir = Vector3.Zero;
rotDir = Vector3.Zero;
//Movement
if (Input.IsActionPressed(PLAYER_MOVE_FORWARD)) moveDir.Z -= moveVelocity;
if (Input.IsActionJustPressed(PLAYER_MOVE_FORWARD)) rotDir.X = -rotVelocity;
if (Input.IsActionPressed(PLAYER_MOVE_BACKWARDS)) moveDir.Z += moveVelocity;
if (Input.IsActionJustPressed(PLAYER_MOVE_BACKWARDS)) rotDir.X = +rotVelocity;
if (Input.IsActionPressed(PLAYER_MOVE_LEFT)) moveDir.X -= moveVelocity;
if (Input.IsActionJustPressed(PLAYER_MOVE_LEFT)) rotDir.Z = -rotVelocity * 2;
if (Input.IsActionPressed(PLAYER_MOVE_RIGHT)) moveDir.X += moveVelocity;
if (Input.IsActionJustPressed(PLAYER_MOVE_RIGHT)) rotDir.Z = +rotVelocity * 2;
if (Input.IsActionJustReleased(PLAYER_MOVE_LEFT) || Input.IsActionJustReleased(PLAYER_MOVE_RIGHT)) rotDir = Vector3.Zero;
//Fire
if (Input.IsActionJustPressed(PLAYER_FIRE))
if (Shooting)
if (laser.Instantiate() is Node3D shot) {
shot.Position = PlayerRb.Position + new Vector3(0f, 0f, 0.74f);
shot.Position = rbPlayer.Position + new Vector3(0f, 0f, 0.74f);
shots.AddChild(shot);
SoundManager.Instance.Play(SoundManager.Sound.Laser, PlayerRb.Position);
SoundManager.Instance.Play(SoundManager.Sound.Laser, rbPlayer.Position);
Shooting = false;
}
}
public override void _PhysicsProcess(double delta) {
//Movement
if (moveDir != Vector3.Zero) {
if (MoveDirection != Vector3.Zero) {
jet.Visible = true;
KinematicCollision3D collision = PlayerRb.MoveAndCollide(moveDir * (float)delta);
KinematicCollision3D collision = rbPlayer.MoveAndCollide(MoveDirection * (float)delta);
if (collision?.GetCollider() is Node3D collider) {
Node3D parent = collider.GetParent<Node3D>();
Vector3 collisionPosition = collision.GetPosition();
@ -92,7 +62,7 @@ public partial class PlayerShip : Node3D {
}
//Rotation
PlayerRb.RotationDegrees = rotDir;
rbPlayer.RotationDegrees = RotationDirection;
}
public void Explode(Vector3 collisionPosition) {

@ -2,7 +2,7 @@ using System;
using System.Runtime.InteropServices;
using Godot;
namespace Scripts;
namespace GodotspaceShooter.Scripts;
public partial class SoundManager : Node {
[Export] private AudioStreamPlayer backgroundMusic;

@ -0,0 +1,115 @@
using System;
using System.Globalization;
using System.Linq;
using Godot;
namespace GodotspaceShooter.Scripts;
public partial class Ui : Node2D
{
[ExportCategory("Stats")]
[Export] private Label lblLevel;
[Export] private Label lblPoints;
[Export] private ProgressBar barHealth;
[Export] private ProgressBar barLevel;
[ExportCategory("GameOver")]
[Export] private VBoxContainer vBoxGameOver;
[Export] private Label lblGameOver;
[Export] private Button butGameOverRestart;
[Export] private Label lblReachedPoints;
[Export] private Button butGameOverExit;
[ExportCategory("Pause")]
[Export] private VBoxContainer vBoxPause;
[Export] private Button buttonResume;
[Export] private Button buttonPauseRestart;
[Export] private Button butPauseExit;
[ExportCategory("Countdown")]
[Export] private VBoxContainer vBoxCountdown;
[Export] private Label lblCountdown;
[Export] private TextureRect textAnyKey;
[Export] private Label lblAnyKey;
private const double countdownMaxTimer = 3;
private double countdownTimer = countdownMaxTimer;
private bool countdownRunning;
public override void _Ready() {
if (GameManager.Instance is null)
GD.PrintErr("No GameManager found!");
else {
GameManager.Instance.OnRefreshStats += GameManager_RefreshStats;
GameManager.Instance.OnNewCountdown += GameManager_NewCountdown;
GameManager.Instance.OnGameOver += GameManager_GameOver;
InputManager.Instance.StartCountdown += InputManager_StartCountdown;
lblGameOver.Visible = GameManager.Instance.GameOver;
butGameOverRestart.Visible = GameManager.Instance.GameOver;
lblReachedPoints.Visible = GameManager.Instance.GameOver;
butGameOverRestart.Pressed += AllButtonRestartOnPressed;
buttonResume.Pressed += ButtonResumeOnPressed;
buttonPauseRestart.Pressed += AllButtonRestartOnPressed;
butPauseExit.Pressed += AllButExitOnPressed;
butGameOverExit.Pressed += AllButExitOnPressed;
GameManager_RefreshStats(this, EventArgs.Empty);
}
}
private void AllButExitOnPressed() => GetTree().Quit();
private void GameManager_GameOver(object sender, EventArgs e) {
GD.Print($"Game Over! You have reached level {GameManager.Instance.Level} and {GameManager.Instance.Points} points!");
lblReachedPoints.Text = $"You have reached level {GameManager.Instance.Level} and {GameManager.Instance.Points} points!";
foreach (CanvasItem canvasItem in vBoxGameOver.GetChildren().Cast<CanvasItem>()) canvasItem.Visible = true;
vBoxGameOver.Visible = true;
}
private void InputManager_StartCountdown(object sender, EventArgs e) {
lblAnyKey.Visible = false;
textAnyKey.Visible = false;
lblCountdown.Visible = true;
countdownRunning = true;
}
private void GameManager_NewCountdown(object sender, EventArgs e) {
lblCountdown.Text = countdownTimer.ToString(CultureInfo.InvariantCulture);
foreach (CanvasItem canvasItem in vBoxCountdown.GetChildren().Cast<CanvasItem>()) canvasItem.Visible = true;
vBoxCountdown.Visible = true;
lblCountdown.Visible = false;
}
public override void _Process(double delta) {
if (GameManager.Instance.Countdown && countdownRunning) {
countdownTimer -= delta;
lblCountdown.Text = Mathf.RoundToInt(countdownTimer).ToString();
if (countdownTimer <= 0) {
foreach (CanvasItem canvasItem in vBoxCountdown.GetChildren().Cast<CanvasItem>()) canvasItem.Visible = false;
vBoxCountdown.Visible = false;
countdownRunning = false;
GameManager.Instance.Countdown = false;
}
}
}
private void GameManager_RefreshStats(object sender, EventArgs e) {
lblLevel.Text = $"{GameManager.Instance.Level}";
lblPoints.Text = $"{GameManager.Instance.Points}";
barHealth.MaxValue = GameManager.Instance.MaxLives;
barHealth.Value = GameManager.Instance.Lives;
barHealth.TooltipText = $"{GameManager.Instance.Lives} / {GameManager.Instance.MaxLives}";
barLevel.MaxValue = GameManager.Instance.NextLevelPoints;
barLevel.Value = GameManager.Instance.Points - GameManager.Instance.LastLevelPoints;
barLevel.TooltipText = $"{GameManager.Instance.Points} / {GameManager.Instance.NextLevelPoints}";
vBoxPause.Visible = GameManager.Instance.GamePaused;
vBoxGameOver.Visible = GameManager.Instance.GameOver;
}
private static void ButtonResumeOnPressed() => GameManager.Instance.GamePaused = false;
private void AllButtonRestartOnPressed() {
GameManager.Instance.GamePaused = false;
GetTree().ReloadCurrentScene();
}
public static void ShowMessage(string message) => GD.Print(message);
}

@ -0,0 +1,6 @@
<svg width="64" height="64" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs/>
<g>
<path stroke="none" fill="#FFFFFF" d="M12.6 18.1 L20.6 28.8 Q21.05 29.45 21 30.2 L20.35 31.45 Q19.75 32 19 32 L14 32 Q14 39.45 19.3 44.75 24.55 50 32 50 39.45 50 44.75 44.75 50 39.45 50 32 50 24.55 44.75 19.3 39.45 14 32 14 24.7 14 19.5 19.05 L15.85 14.25 Q22.65 8 32 8 41.95 8 49 15.05 56 22.05 56 32 56 41.95 49 49 41.95 56 32 56 22.05 56 15.05 49 8 41.95 8 32 L3 32 Q2.25 32 1.65 31.45 1.1 30.95 1 30.2 0.95 29.45 1.4 28.8 L9.4 18.1 Q9.8 17.6 10.4 17.4 11 17.25 11.6 17.4 12.2 17.6 12.6 18.1"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 638 B

@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://b8gy1u2i0jkyd"
path="res://.godot/imported/restart.svg-98c792bd948b9b683b245e78c0930bfc.ctex"
uid="uid://d3tkfqng4erhj"
path="res://.godot/imported/generic_arrow_3.svg-b4290a859159fb8c7b12bda0e7002f2e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://Images/restart.svg"
dest_files=["res://.godot/imported/restart.svg-98c792bd948b9b683b245e78c0930bfc.ctex"]
source_file="res://Scripts/generic_arrow_3.svg"
dest_files=["res://.godot/imported/generic_arrow_3.svg-b4290a859159fb8c7b12bda0e7002f2e.ctex"]
[params]

@ -40,3 +40,69 @@ rm -rf \"{temp_dir}\""
dotnet/include_scripts_content=false
dotnet/include_debug_symbols=true
dotnet/embed_build_outputs=false
[preset.1]
name="Windows Desktop"
platform="Windows Desktop"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path=""
encryption_include_filters=""
encryption_exclude_filters=""
encrypt_pck=false
encrypt_directory=false
[preset.1.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/bptc=true
texture_format/s3tc=true
texture_format/etc=false
texture_format/etc2=false
binary_format/architecture="x86_64"
codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true
application/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name=""
application/file_description=""
application/copyright=""
application/trademarks=""
application/export_angle=0
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"
dotnet/include_scripts_content=false
dotnet/include_debug_symbols=true
dotnet/embed_build_outputs=false

@ -13,7 +13,7 @@ config_version=5
config/name="Space Shooter"
config/version="0.1"
run/main_scene="res://Scenes/SpaceShooter.tscn"
config/features=PackedStringArray("4.2", "C#", "Forward Plus")
config/features=PackedStringArray("4.3", "C#")
boot_splash/image="res://Images/GodotSplashScreen.png"
config/icon="res://Images/Space-Shooter.png"
@ -63,3 +63,10 @@ Player_Fire={
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":1,"pressure":0.0,"pressed":false,"script":null)
]
}
Game_Pause={
"deadzone": 0.5,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194313,"key_label":0,"unicode":0,"echo":false,"script":null)
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"button_index":6,"pressure":0.0,"pressed":false,"script":null)
]
}