diff --git a/.gitignore b/.gitignore index 0b7cc5a..74c1981 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,16 @@ -# Godot 4+ specific ignores -.godot/ -/android/ +# Godot 项目文件 +main/.godot/ +main/android/ -# C++ 扩展编译产物 -/build/ -/bin/ +# C++ 编译产物 +build/ +main/bin/ + +# IDE *.user *.suo +.vs/ +.vscode/ # 其他 .DS_Store diff --git a/.godot/.gdignore b/.godot/.gdignore new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/.godot/.gdignore @@ -0,0 +1 @@ + diff --git a/.godot/editor/editor_layout.cfg b/.godot/editor/editor_layout.cfg new file mode 100644 index 0000000..4d36f4e --- /dev/null +++ b/.godot/editor/editor_layout.cfg @@ -0,0 +1,73 @@ +[docks] + +dock_3_selected_tab_idx=0 +dock_4_selected_tab_idx=0 +dock_5_selected_tab_idx=0 +dock_floating={} +dock_closed=[] +dock_split_2=0 +dock_split_3=0 +dock_hsplit_1=0 +dock_hsplit_2=280 +dock_hsplit_3=-280 +dock_hsplit_4=0 +dock_3="Scene,Import" +dock_4="FileSystem,History" +dock_5="Inspector,Signals,Groups" +dock_9="Output,Debugger,Audio,Animation,Shader Editor,Search Results,AnimationTree,ResourcePreloader,ShaderFile,SpriteFrames,Theme,Polygon,TileSet,TileMap,Replication,GridMap" + +[docks/FileSystem] + +h_split_offset=300 +v_split_offset=0 +display_mode=0 +file_sort=0 +file_list_display_mode=1 +selected_paths=PackedStringArray("res://") +uncollapsed_paths=PackedStringArray("Favorites", "res://") + +[docks/History] + +include_scene=true +include_global=true + +[EditorNode] + +open_scenes=PackedStringArray() +current_scene="" +bottom_panel_offsets={ +"Animation": 0, +"Audio": -450, +"Debugger": 0, +"Output": 0, +"Shader Editor": 0 +} +selected_default_debugger_tab_idx=0 +selected_main_editor_idx=0 + +[EditorWindow] + +screen=0 +mode="maximized" +position=Vector2i(0, 45) + +[ScriptEditor] + +open_scripts=[] +selected_script="" +open_help=[] +script_split_offset=250 +list_split_offset=0 +zoom_factor=1.0 + +[GameView] + +floating_window_rect=Rect2i(0, 0, 0, 0) +floating_window_screen=-1 + +[ShaderEditor] + +open_shaders=[] +split_offset=250 +selected_shader="" +text_shader_zoom_factor=1.0 diff --git a/.godot/editor/editor_script_doc_cache.res b/.godot/editor/editor_script_doc_cache.res new file mode 100644 index 0000000..0bd0a9f Binary files /dev/null and b/.godot/editor/editor_script_doc_cache.res differ diff --git a/.godot/editor/editor_script_doc_cache.res-folding-a7de57390d6e786984ca20c70a831128.cfg b/.godot/editor/editor_script_doc_cache.res-folding-a7de57390d6e786984ca20c70a831128.cfg new file mode 100644 index 0000000..e860dd4 --- /dev/null +++ b/.godot/editor/editor_script_doc_cache.res-folding-a7de57390d6e786984ca20c70a831128.cfg @@ -0,0 +1,3 @@ +[folding] + +sections_unfolded=PackedStringArray() diff --git a/.godot/editor/favorites.CanvasItem b/.godot/editor/favorites.CanvasItem new file mode 100644 index 0000000..e69de29 diff --git a/.godot/editor/favorites.Node b/.godot/editor/favorites.Node new file mode 100644 index 0000000..e69de29 diff --git a/.godot/editor/filesystem_cache10 b/.godot/editor/filesystem_cache10 new file mode 100644 index 0000000..d712abc --- /dev/null +++ b/.godot/editor/filesystem_cache10 @@ -0,0 +1,3 @@ +63f7b34db8d8cdea90c76aacccf841ec +::res://::1770910434 +icon.svg::CompressedTexture2D::1032248987546973613::1770899576::1770899582::1::::<><><>0<>0<>a844cc33f2422ec468dcd6fc2526be58<>res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex:: diff --git a/.godot/editor/project_metadata.cfg b/.godot/editor/project_metadata.cfg new file mode 100644 index 0000000..ec3e5a2 --- /dev/null +++ b/.godot/editor/project_metadata.cfg @@ -0,0 +1,11 @@ +[game_view] + +select_mode=0 + +[editor_metadata] + +executable_path="F:/Godot_v4.6-stable_win64.exe" + +[dialog_bounds] + +create_new_node=Rect2(397, 162, 1624, 875) diff --git a/.godot/editor/script_editor_cache.cfg b/.godot/editor/script_editor_cache.cfg new file mode 100644 index 0000000..e69de29 diff --git a/.godot/global_script_class_cache.cfg b/.godot/global_script_class_cache.cfg new file mode 100644 index 0000000..32c2394 --- /dev/null +++ b/.godot/global_script_class_cache.cfg @@ -0,0 +1 @@ +list=[] diff --git a/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex b/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex new file mode 100644 index 0000000..6e1d156 Binary files /dev/null and b/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex differ diff --git a/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.md5 b/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.md5 new file mode 100644 index 0000000..49879df --- /dev/null +++ b/.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.md5 @@ -0,0 +1,3 @@ +source_md5="a16f2eed1b4496c4abf03d329708ba09" +dest_md5="b48bef1f2eefdd190e0a3e60a6188d75" + diff --git a/.godot/shader_cache/BestFitNormalShaderRD/c44f4ab98ed0bad58187d364fb3c837166cb7b6ec6d0f099523c6e6024b22d1b/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/BestFitNormalShaderRD/c44f4ab98ed0bad58187d364fb3c837166cb7b6ec6d0f099523c6e6024b22d1b/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..1af1756 Binary files /dev/null and b/.godot/shader_cache/BestFitNormalShaderRD/c44f4ab98ed0bad58187d364fb3c837166cb7b6ec6d0f099523c6e6024b22d1b/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/BlitShaderRD/70cc53cab0575e0db6c0ddeaaf4d72f264f933f6807f17dade6fb3502afc3e1e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/BlitShaderRD/70cc53cab0575e0db6c0ddeaaf4d72f264f933f6807f17dade6fb3502afc3e1e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..2a7f84f Binary files /dev/null and b/.godot/shader_cache/BlitShaderRD/70cc53cab0575e0db6c0ddeaaf4d72f264f933f6807f17dade6fb3502afc3e1e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/BokehDofShaderRD/f2c9646179990df62ae1aa7304820db84ff133d9d86dcad7d62903bf99a5690d/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/BokehDofShaderRD/f2c9646179990df62ae1aa7304820db84ff133d9d86dcad7d62903bf99a5690d/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..8c1a0b4 Binary files /dev/null and b/.godot/shader_cache/BokehDofShaderRD/f2c9646179990df62ae1aa7304820db84ff133d9d86dcad7d62903bf99a5690d/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/CanvasOcclusionShaderRD/a6308584bd5fa4e3fc90f08561013c2d643f34582b2162c41fb857191ed4cd46/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/CanvasOcclusionShaderRD/a6308584bd5fa4e3fc90f08561013c2d643f34582b2162c41fb857191ed4cd46/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..2ea0b65 Binary files /dev/null and b/.godot/shader_cache/CanvasOcclusionShaderRD/a6308584bd5fa4e3fc90f08561013c2d643f34582b2162c41fb857191ed4cd46/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/CanvasSdfShaderRD/b2b38563d7912e21671babd8f096b5bcd067a8bc31a9be7a42dd418cfbc7089d/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/CanvasSdfShaderRD/b2b38563d7912e21671babd8f096b5bcd067a8bc31a9be7a42dd418cfbc7089d/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..e6f6c29 Binary files /dev/null and b/.godot/shader_cache/CanvasSdfShaderRD/b2b38563d7912e21671babd8f096b5bcd067a8bc31a9be7a42dd418cfbc7089d/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..0467074 Binary files /dev/null and b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/45fb1ddc6499e56682916a355ce2839e61f42dfe.d3d12.cache b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/45fb1ddc6499e56682916a355ce2839e61f42dfe.d3d12.cache new file mode 100644 index 0000000..c933c1b Binary files /dev/null and b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/45fb1ddc6499e56682916a355ce2839e61f42dfe.d3d12.cache differ diff --git a/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/4d35b4f1b981d75cb121b24f26aba4271d0d7a2f.d3d12.cache b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/4d35b4f1b981d75cb121b24f26aba4271d0d7a2f.d3d12.cache new file mode 100644 index 0000000..d0d75e1 Binary files /dev/null and b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/4d35b4f1b981d75cb121b24f26aba4271d0d7a2f.d3d12.cache differ diff --git a/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/8a7277c8d3ac029b087c3fa9c55de85560be5119.d3d12.cache b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/8a7277c8d3ac029b087c3fa9c55de85560be5119.d3d12.cache new file mode 100644 index 0000000..449569d Binary files /dev/null and b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/8a7277c8d3ac029b087c3fa9c55de85560be5119.d3d12.cache differ diff --git a/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/c0a681ae42aa3e0b5abba232ccae0b036be455e4.d3d12.cache b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/c0a681ae42aa3e0b5abba232ccae0b036be455e4.d3d12.cache new file mode 100644 index 0000000..ed0d88a Binary files /dev/null and b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/c0a681ae42aa3e0b5abba232ccae0b036be455e4.d3d12.cache differ diff --git a/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/f3e258e8f7ec2e7e740b62f3bc48ecf5c99fb0db.d3d12.cache b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/f3e258e8f7ec2e7e740b62f3bc48ecf5c99fb0db.d3d12.cache new file mode 100644 index 0000000..baa6bf3 Binary files /dev/null and b/.godot/shader_cache/CanvasShaderRD/e12cc79542567eb256a367a1b065ebf61b1f7125978de9085887a1879bae56c3/f3e258e8f7ec2e7e740b62f3bc48ecf5c99fb0db.d3d12.cache differ diff --git a/.godot/shader_cache/ClusterDebugShaderRD/2fb34708b9b7057776d96a55f199da37471430d6879d781c05909e06dfae69ef/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/ClusterDebugShaderRD/2fb34708b9b7057776d96a55f199da37471430d6879d781c05909e06dfae69ef/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..f4c6d35 Binary files /dev/null and b/.godot/shader_cache/ClusterDebugShaderRD/2fb34708b9b7057776d96a55f199da37471430d6879d781c05909e06dfae69ef/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/ClusterRenderShaderRD/82e8ab19fc6ffeb862afacd533d28e350e43924525a842a7fa978ed1889a83af/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/ClusterRenderShaderRD/82e8ab19fc6ffeb862afacd533d28e350e43924525a842a7fa978ed1889a83af/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..4ce588c Binary files /dev/null and b/.godot/shader_cache/ClusterRenderShaderRD/82e8ab19fc6ffeb862afacd533d28e350e43924525a842a7fa978ed1889a83af/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/ClusterStoreShaderRD/561f14535837abda7165feef640f886c8a57bc0f7e4fbe191446d89ab1a51bd6/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/ClusterStoreShaderRD/561f14535837abda7165feef640f886c8a57bc0f7e4fbe191446d89ab1a51bd6/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..d43830d Binary files /dev/null and b/.godot/shader_cache/ClusterStoreShaderRD/561f14535837abda7165feef640f886c8a57bc0f7e4fbe191446d89ab1a51bd6/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/CopyShaderRD/f52d572bccf3aad6815b382b6cb59250f964e9731fe037869571a3b13e97717b/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/CopyShaderRD/f52d572bccf3aad6815b382b6cb59250f964e9731fe037869571a3b13e97717b/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..5d78d5c Binary files /dev/null and b/.godot/shader_cache/CopyShaderRD/f52d572bccf3aad6815b382b6cb59250f964e9731fe037869571a3b13e97717b/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/CopyToFbShaderRD/3b72584c7ec23c1c28a60cd6f0ad1e9b3691e02a0d397a900c0039715ca6c185/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/CopyToFbShaderRD/3b72584c7ec23c1c28a60cd6f0ad1e9b3691e02a0d397a900c0039715ca6c185/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..fbdc421 Binary files /dev/null and b/.godot/shader_cache/CopyToFbShaderRD/3b72584c7ec23c1c28a60cd6f0ad1e9b3691e02a0d397a900c0039715ca6c185/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/CubeToDpShaderRD/bc5ab1cdea059b149a6d33f4c08d74b2477eeb6ab32e5f694edbb43261a74eda/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/CubeToDpShaderRD/bc5ab1cdea059b149a6d33f4c08d74b2477eeb6ab32e5f694edbb43261a74eda/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..fcd1e5d Binary files /dev/null and b/.godot/shader_cache/CubeToDpShaderRD/bc5ab1cdea059b149a6d33f4c08d74b2477eeb6ab32e5f694edbb43261a74eda/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/CubeToOctmapShaderRD/2d944141feeea96df7c9349c7dd99046dcc685fc6f3ffd6e5926df643a3a7c3c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/CubeToOctmapShaderRD/2d944141feeea96df7c9349c7dd99046dcc685fc6f3ffd6e5926df643a3a7c3c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..6a14758 Binary files /dev/null and b/.godot/shader_cache/CubeToOctmapShaderRD/2d944141feeea96df7c9349c7dd99046dcc685fc6f3ffd6e5926df643a3a7c3c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/FsrUpscaleShaderRD/1f8918b1aacd9a5fbe1b632a87816b4c53905dc0ed73ea3485408a0064e62cbe/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/FsrUpscaleShaderRD/1f8918b1aacd9a5fbe1b632a87816b4c53905dc0ed73ea3485408a0064e62cbe/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..1cfd72f Binary files /dev/null and b/.godot/shader_cache/FsrUpscaleShaderRD/1f8918b1aacd9a5fbe1b632a87816b4c53905dc0ed73ea3485408a0064e62cbe/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/GiShaderRD/16f32daf9c72d87bbae4e1ff6f27296e6ff025f6d52bf298287843959dfebc32/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/GiShaderRD/16f32daf9c72d87bbae4e1ff6f27296e6ff025f6d52bf298287843959dfebc32/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..159f36a Binary files /dev/null and b/.godot/shader_cache/GiShaderRD/16f32daf9c72d87bbae4e1ff6f27296e6ff025f6d52bf298287843959dfebc32/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/GiShaderRD/cf2797ec10f0e6186e0db5d1638266af7e21d2b330cc04e4ea980f2fc6b53129/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/GiShaderRD/cf2797ec10f0e6186e0db5d1638266af7e21d2b330cc04e4ea980f2fc6b53129/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..8560d14 Binary files /dev/null and b/.godot/shader_cache/GiShaderRD/cf2797ec10f0e6186e0db5d1638266af7e21d2b330cc04e4ea980f2fc6b53129/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/IntegrateDfgShaderRD/e3e0d64b971e32b5cd8c6cf924827501c0bb0ef607ae9027d0144bcaee330833/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/IntegrateDfgShaderRD/e3e0d64b971e32b5cd8c6cf924827501c0bb0ef607ae9027d0144bcaee330833/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..4176074 Binary files /dev/null and b/.godot/shader_cache/IntegrateDfgShaderRD/e3e0d64b971e32b5cd8c6cf924827501c0bb0ef607ae9027d0144bcaee330833/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/LuminanceReduceShaderRD/641bc51ca2c0f9cb86d4bc503f7c7e6097c614bc41ee40f3b582a3b78dc1d56f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/LuminanceReduceShaderRD/641bc51ca2c0f9cb86d4bc503f7c7e6097c614bc41ee40f3b582a3b78dc1d56f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..5749bec Binary files /dev/null and b/.godot/shader_cache/LuminanceReduceShaderRD/641bc51ca2c0f9cb86d4bc503f7c7e6097c614bc41ee40f3b582a3b78dc1d56f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/MotionVectorsShaderRD/fa8e3ec74a86d3ed4b2d8810b324476e0c1c207b1b95439e349f33c70c331a4f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/MotionVectorsShaderRD/fa8e3ec74a86d3ed4b2d8810b324476e0c1c207b1b95439e349f33c70c331a4f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..726961b Binary files /dev/null and b/.godot/shader_cache/MotionVectorsShaderRD/fa8e3ec74a86d3ed4b2d8810b324476e0c1c207b1b95439e349f33c70c331a4f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/OctmapDownsamplerShaderRD/0b7dcf917234a3f85fb1350267cf36fef3a19a477a66b295d4f5f474427d7b58/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/OctmapDownsamplerShaderRD/0b7dcf917234a3f85fb1350267cf36fef3a19a477a66b295d4f5f474427d7b58/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..3fdd4d9 Binary files /dev/null and b/.godot/shader_cache/OctmapDownsamplerShaderRD/0b7dcf917234a3f85fb1350267cf36fef3a19a477a66b295d4f5f474427d7b58/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/OctmapFilterShaderRD/b64b447020068bffa138c05ef7c701bd755e5e28dd4130d7fe9a4869d893a151/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/OctmapFilterShaderRD/b64b447020068bffa138c05ef7c701bd755e5e28dd4130d7fe9a4869d893a151/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..00e1329 Binary files /dev/null and b/.godot/shader_cache/OctmapFilterShaderRD/b64b447020068bffa138c05ef7c701bd755e5e28dd4130d7fe9a4869d893a151/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/OctmapRoughnessShaderRD/d8b6ba9b8ad2feaacc3600c0ddfa386a1946e00368c654c2e6d120de30fd37a7/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/OctmapRoughnessShaderRD/d8b6ba9b8ad2feaacc3600c0ddfa386a1946e00368c654c2e6d120de30fd37a7/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..1bdaa48 Binary files /dev/null and b/.godot/shader_cache/OctmapRoughnessShaderRD/d8b6ba9b8ad2feaacc3600c0ddfa386a1946e00368c654c2e6d120de30fd37a7/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/ParticlesCopyShaderRD/e9aec98aa9c0e621e7b9c7290950f0cded624717c1abb5b16bb6adc3c80e809e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/ParticlesCopyShaderRD/e9aec98aa9c0e621e7b9c7290950f0cded624717c1abb5b16bb6adc3c80e809e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..5160463 Binary files /dev/null and b/.godot/shader_cache/ParticlesCopyShaderRD/e9aec98aa9c0e621e7b9c7290950f0cded624717c1abb5b16bb6adc3c80e809e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/ParticlesShaderRD/9b275b7da29c819507092c91e3b11d24d25ff105ea0f2c768fd930e6e38db7a5/f128cab0b22fb7e0d9f023d6cdb81309be392d95.d3d12.cache b/.godot/shader_cache/ParticlesShaderRD/9b275b7da29c819507092c91e3b11d24d25ff105ea0f2c768fd930e6e38db7a5/f128cab0b22fb7e0d9f023d6cdb81309be392d95.d3d12.cache new file mode 100644 index 0000000..78896cc Binary files /dev/null and b/.godot/shader_cache/ParticlesShaderRD/9b275b7da29c819507092c91e3b11d24d25ff105ea0f2c768fd930e6e38db7a5/f128cab0b22fb7e0d9f023d6cdb81309be392d95.d3d12.cache differ diff --git a/.godot/shader_cache/ResolveShaderRD/e540026b52d2ce6e5c066bb4c4654eb9350106356086cb609fdb171e70be3986/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/ResolveShaderRD/e540026b52d2ce6e5c066bb4c4654eb9350106356086cb609fdb171e70be3986/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..8624bd0 Binary files /dev/null and b/.godot/shader_cache/ResolveShaderRD/e540026b52d2ce6e5c066bb4c4654eb9350106356086cb609fdb171e70be3986/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/111f8cfd3c260d918df85827eb251dc36a43cb13.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/111f8cfd3c260d918df85827eb251dc36a43cb13.d3d12.cache new file mode 100644 index 0000000..127f68e Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/111f8cfd3c260d918df85827eb251dc36a43cb13.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/35a078cb7dc07df55e460ed1a913486a68ab6bb0.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/35a078cb7dc07df55e460ed1a913486a68ab6bb0.d3d12.cache new file mode 100644 index 0000000..bb87c31 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/35a078cb7dc07df55e460ed1a913486a68ab6bb0.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/3d6fc53bad5e871b1b878eb1a4ed0a0fcec449cb.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/3d6fc53bad5e871b1b878eb1a4ed0a0fcec449cb.d3d12.cache new file mode 100644 index 0000000..3a5b19e Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/3d6fc53bad5e871b1b878eb1a4ed0a0fcec449cb.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7412c254abd0f944fb53942228920fe187f1d723.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7412c254abd0f944fb53942228920fe187f1d723.d3d12.cache new file mode 100644 index 0000000..208a068 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7412c254abd0f944fb53942228920fe187f1d723.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7a57964a6a80c226a1011fb78edbda41d2219632.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7a57964a6a80c226a1011fb78edbda41d2219632.d3d12.cache new file mode 100644 index 0000000..0d72b09 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7a57964a6a80c226a1011fb78edbda41d2219632.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7a6b05ba6ca90f8a542e0d1fcc3360f7d52c6e09.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7a6b05ba6ca90f8a542e0d1fcc3360f7d52c6e09.d3d12.cache new file mode 100644 index 0000000..9e9ff96 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7a6b05ba6ca90f8a542e0d1fcc3360f7d52c6e09.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7d4c2429f20db9b651852713d31971380f209eec.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7d4c2429f20db9b651852713d31971380f209eec.d3d12.cache new file mode 100644 index 0000000..3e775f4 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/7d4c2429f20db9b651852713d31971380f209eec.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/89044bace37a3ce54cf2cc5190e11bed6d14f97a.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/89044bace37a3ce54cf2cc5190e11bed6d14f97a.d3d12.cache new file mode 100644 index 0000000..93b90c5 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/89044bace37a3ce54cf2cc5190e11bed6d14f97a.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/a38af1e47720abf30ca44f3d3c099c07b046df81.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/a38af1e47720abf30ca44f3d3c099c07b046df81.d3d12.cache new file mode 100644 index 0000000..7096afa Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/a38af1e47720abf30ca44f3d3c099c07b046df81.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/ab0b960474f1491b42ef9f2ca13dbd4ccaf64911.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/ab0b960474f1491b42ef9f2ca13dbd4ccaf64911.d3d12.cache new file mode 100644 index 0000000..0d5e6b2 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/ab0b960474f1491b42ef9f2ca13dbd4ccaf64911.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/f88424e725a3bb50f358e9b042552af7b1c2f921.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/f88424e725a3bb50f358e9b042552af7b1c2f921.d3d12.cache new file mode 100644 index 0000000..2abf65c Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/f88424e725a3bb50f358e9b042552af7b1c2f921.d3d12.cache differ diff --git a/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/f89c365b12d7e2d46fb2e1f6ace46a76b6cd5e89.d3d12.cache b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/f89c365b12d7e2d46fb2e1f6ace46a76b6cd5e89.d3d12.cache new file mode 100644 index 0000000..2abada1 Binary files /dev/null and b/.godot/shader_cache/SceneForwardClusteredShaderRD/afe1ccaa524f31115fde68e966f878e56f1d298fa70718df1cdb66f89dfb4b1b/f89c365b12d7e2d46fb2e1f6ace46a76b6cd5e89.d3d12.cache differ diff --git a/.godot/shader_cache/ScreenSpaceReflectionDownsampleShaderRD/8c81279786a740e0378706a934ecf729e7d816c52ab7ba92f3c902fd7e57338c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/ScreenSpaceReflectionDownsampleShaderRD/8c81279786a740e0378706a934ecf729e7d816c52ab7ba92f3c902fd7e57338c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..06f0cb1 Binary files /dev/null and b/.godot/shader_cache/ScreenSpaceReflectionDownsampleShaderRD/8c81279786a740e0378706a934ecf729e7d816c52ab7ba92f3c902fd7e57338c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/ScreenSpaceReflectionFilterShaderRD/24675c282387b16bd4dbcee7ab5f877ceca5638e039305e8f84fe95528c1c97c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/ScreenSpaceReflectionFilterShaderRD/24675c282387b16bd4dbcee7ab5f877ceca5638e039305e8f84fe95528c1c97c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..1943cde Binary files /dev/null and b/.godot/shader_cache/ScreenSpaceReflectionFilterShaderRD/24675c282387b16bd4dbcee7ab5f877ceca5638e039305e8f84fe95528c1c97c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/ScreenSpaceReflectionHizShaderRD/d392282fe7da43a34aa3db1627d9487035ce03ec31bedeaef80be0a6abdef90c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/ScreenSpaceReflectionHizShaderRD/d392282fe7da43a34aa3db1627d9487035ce03ec31bedeaef80be0a6abdef90c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..b791e31 Binary files /dev/null and b/.godot/shader_cache/ScreenSpaceReflectionHizShaderRD/d392282fe7da43a34aa3db1627d9487035ce03ec31bedeaef80be0a6abdef90c/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/ScreenSpaceReflectionResolveShaderRD/9d3d9e29a56d1fe996170ef3c390c3799a5121870590c3ae50e2021925595591/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/ScreenSpaceReflectionResolveShaderRD/9d3d9e29a56d1fe996170ef3c390c3799a5121870590c3ae50e2021925595591/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..be77ec9 Binary files /dev/null and b/.godot/shader_cache/ScreenSpaceReflectionResolveShaderRD/9d3d9e29a56d1fe996170ef3c390c3799a5121870590c3ae50e2021925595591/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/ScreenSpaceReflectionShaderRD/0341856c05a4a765b1fea15571478ba72d33c266f9944f5f4637bf4d98ca5b96/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/ScreenSpaceReflectionShaderRD/0341856c05a4a765b1fea15571478ba72d33c266f9944f5f4637bf4d98ca5b96/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..69831e5 Binary files /dev/null and b/.godot/shader_cache/ScreenSpaceReflectionShaderRD/0341856c05a4a765b1fea15571478ba72d33c266f9944f5f4637bf4d98ca5b96/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SdfgiDebugProbesShaderRD/3803638b20896491187f603049bf8a2253ff67ea47599916ca5539f0f1d93a69/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SdfgiDebugProbesShaderRD/3803638b20896491187f603049bf8a2253ff67ea47599916ca5539f0f1d93a69/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..7d9bff7 Binary files /dev/null and b/.godot/shader_cache/SdfgiDebugProbesShaderRD/3803638b20896491187f603049bf8a2253ff67ea47599916ca5539f0f1d93a69/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SdfgiDebugShaderRD/2958456ff5fd97ca55891e03c19d8c63adf8334e9260d43c844444d04385bf38/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SdfgiDebugShaderRD/2958456ff5fd97ca55891e03c19d8c63adf8334e9260d43c844444d04385bf38/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..2590615 Binary files /dev/null and b/.godot/shader_cache/SdfgiDebugShaderRD/2958456ff5fd97ca55891e03c19d8c63adf8334e9260d43c844444d04385bf38/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SdfgiDirectLightShaderRD/bad813c472179b6502371f263f475137063c706ea73ff9b33cdaf56b5738dbde/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SdfgiDirectLightShaderRD/bad813c472179b6502371f263f475137063c706ea73ff9b33cdaf56b5738dbde/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..024fa0b Binary files /dev/null and b/.godot/shader_cache/SdfgiDirectLightShaderRD/bad813c472179b6502371f263f475137063c706ea73ff9b33cdaf56b5738dbde/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SdfgiIntegrateShaderRD/1dd7ed1a5722f7058142a736280362c8f7f48c030c2eddcac5976b96a4c273d7/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SdfgiIntegrateShaderRD/1dd7ed1a5722f7058142a736280362c8f7f48c030c2eddcac5976b96a4c273d7/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..f5ea49c Binary files /dev/null and b/.godot/shader_cache/SdfgiIntegrateShaderRD/1dd7ed1a5722f7058142a736280362c8f7f48c030c2eddcac5976b96a4c273d7/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SdfgiPreprocessShaderRD/fadad35114cde819c0665ccd98ca77901f7f8f551bc291f69c753455c66d182e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SdfgiPreprocessShaderRD/fadad35114cde819c0665ccd98ca77901f7f8f551bc291f69c753455c66d182e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..0f19d8c Binary files /dev/null and b/.godot/shader_cache/SdfgiPreprocessShaderRD/fadad35114cde819c0665ccd98ca77901f7f8f551bc291f69c753455c66d182e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/ShadowFrustumShaderRD/023d97f7f1c5717260e31f75a48fbf9d60396e6369c90849a668e15f46381ff1/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/ShadowFrustumShaderRD/023d97f7f1c5717260e31f75a48fbf9d60396e6369c90849a668e15f46381ff1/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..a34df30 Binary files /dev/null and b/.godot/shader_cache/ShadowFrustumShaderRD/023d97f7f1c5717260e31f75a48fbf9d60396e6369c90849a668e15f46381ff1/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SkeletonShaderRD/1215ec971ac43b3f029705bc39caf6589e795c71272583b78b7ca0f1ae429ed9/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SkeletonShaderRD/1215ec971ac43b3f029705bc39caf6589e795c71272583b78b7ca0f1ae429ed9/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..37e2587 Binary files /dev/null and b/.godot/shader_cache/SkeletonShaderRD/1215ec971ac43b3f029705bc39caf6589e795c71272583b78b7ca0f1ae429ed9/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/03e3b11c69e24394b2d955a8c0ba85587bb70839.d3d12.cache b/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/03e3b11c69e24394b2d955a8c0ba85587bb70839.d3d12.cache new file mode 100644 index 0000000..361abbf Binary files /dev/null and b/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/03e3b11c69e24394b2d955a8c0ba85587bb70839.d3d12.cache differ diff --git a/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/6b847b83944af8d9a9af91a0871566e6070998ca.d3d12.cache b/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/6b847b83944af8d9a9af91a0871566e6070998ca.d3d12.cache new file mode 100644 index 0000000..36feb25 Binary files /dev/null and b/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/6b847b83944af8d9a9af91a0871566e6070998ca.d3d12.cache differ diff --git a/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/de678811d1bad3cad4892a8db7b6ea0be197d51d.d3d12.cache b/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/de678811d1bad3cad4892a8db7b6ea0be197d51d.d3d12.cache new file mode 100644 index 0000000..85c12e1 Binary files /dev/null and b/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/de678811d1bad3cad4892a8db7b6ea0be197d51d.d3d12.cache differ diff --git a/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/e105b1e014f9523daf8d734c2f2dc115ba341902.d3d12.cache b/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/e105b1e014f9523daf8d734c2f2dc115ba341902.d3d12.cache new file mode 100644 index 0000000..035a29c Binary files /dev/null and b/.godot/shader_cache/SkyShaderRD/8320ccf233baa31156c84f1cb22157775b81c5e426c0cf41b552ac6b39ef0977/e105b1e014f9523daf8d734c2f2dc115ba341902.d3d12.cache differ diff --git a/.godot/shader_cache/SmaaBlendingShaderRD/087e89f9e034ef8f14ded75df2e54da56c050ccc02f3a92053d142df7c2bbb97/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SmaaBlendingShaderRD/087e89f9e034ef8f14ded75df2e54da56c050ccc02f3a92053d142df7c2bbb97/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..9575ea0 Binary files /dev/null and b/.godot/shader_cache/SmaaBlendingShaderRD/087e89f9e034ef8f14ded75df2e54da56c050ccc02f3a92053d142df7c2bbb97/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SmaaEdgeDetectionShaderRD/6a3956179603a982e82c38f5dfd8059e7c3b0ff5eda1ef28cedcb924b1d7723a/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SmaaEdgeDetectionShaderRD/6a3956179603a982e82c38f5dfd8059e7c3b0ff5eda1ef28cedcb924b1d7723a/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..e2bfe47 Binary files /dev/null and b/.godot/shader_cache/SmaaEdgeDetectionShaderRD/6a3956179603a982e82c38f5dfd8059e7c3b0ff5eda1ef28cedcb924b1d7723a/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SmaaWeightCalculationShaderRD/d1e55d440f54955dae72cfcc2d22835ea7a1727fee70aeaceb25bf907dd3414e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SmaaWeightCalculationShaderRD/d1e55d440f54955dae72cfcc2d22835ea7a1727fee70aeaceb25bf907dd3414e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..7a9c58e Binary files /dev/null and b/.godot/shader_cache/SmaaWeightCalculationShaderRD/d1e55d440f54955dae72cfcc2d22835ea7a1727fee70aeaceb25bf907dd3414e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SortShaderRD/d30bb32e5e237c918dccbb9c134e7ac0085ba3cf2730f44eb791dbc61e3c677f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SortShaderRD/d30bb32e5e237c918dccbb9c134e7ac0085ba3cf2730f44eb791dbc61e3c677f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..6daf690 Binary files /dev/null and b/.godot/shader_cache/SortShaderRD/d30bb32e5e237c918dccbb9c134e7ac0085ba3cf2730f44eb791dbc61e3c677f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SpecularMergeShaderRD/c9906c4f05cdfbd2b0f9f9b0cb23e026980289388831dd86a9b1e91d822c9bdf/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SpecularMergeShaderRD/c9906c4f05cdfbd2b0f9f9b0cb23e026980289388831dd86a9b1e91d822c9bdf/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..266d2f1 Binary files /dev/null and b/.godot/shader_cache/SpecularMergeShaderRD/c9906c4f05cdfbd2b0f9f9b0cb23e026980289388831dd86a9b1e91d822c9bdf/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SsEffectsDownsampleShaderRD/e9bc4486bb6b35eaa26fd87dd1a0f8c059dbddc24b15f905a74361ff993e1153/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SsEffectsDownsampleShaderRD/e9bc4486bb6b35eaa26fd87dd1a0f8c059dbddc24b15f905a74361ff993e1153/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..80a448c Binary files /dev/null and b/.godot/shader_cache/SsEffectsDownsampleShaderRD/e9bc4486bb6b35eaa26fd87dd1a0f8c059dbddc24b15f905a74361ff993e1153/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SsaoBlurShaderRD/584ef9d38d575386213a22c5762ca15e5ad7bd48d2ec4867844237d3048ada9a/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SsaoBlurShaderRD/584ef9d38d575386213a22c5762ca15e5ad7bd48d2ec4867844237d3048ada9a/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..a48a4ff Binary files /dev/null and b/.godot/shader_cache/SsaoBlurShaderRD/584ef9d38d575386213a22c5762ca15e5ad7bd48d2ec4867844237d3048ada9a/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SsaoImportanceMapShaderRD/e76e45852aa1053d66a3dd5dacde3b480250087ea51e679d7c6ee594f65e3302/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SsaoImportanceMapShaderRD/e76e45852aa1053d66a3dd5dacde3b480250087ea51e679d7c6ee594f65e3302/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..80fa0e5 Binary files /dev/null and b/.godot/shader_cache/SsaoImportanceMapShaderRD/e76e45852aa1053d66a3dd5dacde3b480250087ea51e679d7c6ee594f65e3302/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SsaoInterleaveShaderRD/0282bdfc5b8fa3b9ef59fc3bbd252c3b74f28419651f3456db872081bda88ee0/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SsaoInterleaveShaderRD/0282bdfc5b8fa3b9ef59fc3bbd252c3b74f28419651f3456db872081bda88ee0/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..174bf9f Binary files /dev/null and b/.godot/shader_cache/SsaoInterleaveShaderRD/0282bdfc5b8fa3b9ef59fc3bbd252c3b74f28419651f3456db872081bda88ee0/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SsaoShaderRD/80e3a24b4f37990e1d1ac23c518880516781b46026b5397cf868af21b5383580/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SsaoShaderRD/80e3a24b4f37990e1d1ac23c518880516781b46026b5397cf868af21b5383580/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..0ff4c88 Binary files /dev/null and b/.godot/shader_cache/SsaoShaderRD/80e3a24b4f37990e1d1ac23c518880516781b46026b5397cf868af21b5383580/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SsilBlurShaderRD/b8d2b710db0f2f3941a73767ad1dc141a3f70446c9445ecd51f9bfe1b00ee968/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SsilBlurShaderRD/b8d2b710db0f2f3941a73767ad1dc141a3f70446c9445ecd51f9bfe1b00ee968/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..339d4e4 Binary files /dev/null and b/.godot/shader_cache/SsilBlurShaderRD/b8d2b710db0f2f3941a73767ad1dc141a3f70446c9445ecd51f9bfe1b00ee968/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SsilImportanceMapShaderRD/086b0ce101d617620937dde126f9feba3698c22bdbd719a2b046561e96c1d30f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SsilImportanceMapShaderRD/086b0ce101d617620937dde126f9feba3698c22bdbd719a2b046561e96c1d30f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..0d7cd31 Binary files /dev/null and b/.godot/shader_cache/SsilImportanceMapShaderRD/086b0ce101d617620937dde126f9feba3698c22bdbd719a2b046561e96c1d30f/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SsilInterleaveShaderRD/ab14c1b31218ed18f1071aa652d87d6e4b27fcf1aa807c6a3ef2f1541f768253/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SsilInterleaveShaderRD/ab14c1b31218ed18f1071aa652d87d6e4b27fcf1aa807c6a3ef2f1541f768253/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..b4cb540 Binary files /dev/null and b/.godot/shader_cache/SsilInterleaveShaderRD/ab14c1b31218ed18f1071aa652d87d6e4b27fcf1aa807c6a3ef2f1541f768253/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SsilShaderRD/a741dc74925cd5592676b56d6b4e5847dd0fca984c77b3c9c9e25f7f913c159b/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SsilShaderRD/a741dc74925cd5592676b56d6b4e5847dd0fca984c77b3c9c9e25f7f913c159b/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..b07ed42 Binary files /dev/null and b/.godot/shader_cache/SsilShaderRD/a741dc74925cd5592676b56d6b4e5847dd0fca984c77b3c9c9e25f7f913c159b/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/SubsurfaceScatteringShaderRD/26852bbd9f248ac5a6aca8dff49d648a860094dcdcc59b3cfcb623596dc65f4e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/SubsurfaceScatteringShaderRD/26852bbd9f248ac5a6aca8dff49d648a860094dcdcc59b3cfcb623596dc65f4e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..750175b Binary files /dev/null and b/.godot/shader_cache/SubsurfaceScatteringShaderRD/26852bbd9f248ac5a6aca8dff49d648a860094dcdcc59b3cfcb623596dc65f4e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/TaaResolveShaderRD/07b66103ad08d9919433dc433d667bca5794653274754f87ab26bcce35f629af/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/TaaResolveShaderRD/07b66103ad08d9919433dc433d667bca5794653274754f87ab26bcce35f629af/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..2208a73 Binary files /dev/null and b/.godot/shader_cache/TaaResolveShaderRD/07b66103ad08d9919433dc433d667bca5794653274754f87ab26bcce35f629af/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/TonemapShaderRD/49ddde10ce87ab9f87952828202096b33cc360185c517ce7e2703766511ad884/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/TonemapShaderRD/49ddde10ce87ab9f87952828202096b33cc360185c517ce7e2703766511ad884/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..8def5d9 Binary files /dev/null and b/.godot/shader_cache/TonemapShaderRD/49ddde10ce87ab9f87952828202096b33cc360185c517ce7e2703766511ad884/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/VolumetricFogProcessShaderRD/f78025f2ae3c0f97200b5da761e9d2f853a4425cdc9848e913632ecc41da4c13/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/VolumetricFogProcessShaderRD/f78025f2ae3c0f97200b5da761e9d2f853a4425cdc9848e913632ecc41da4c13/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..c30d53e Binary files /dev/null and b/.godot/shader_cache/VolumetricFogProcessShaderRD/f78025f2ae3c0f97200b5da761e9d2f853a4425cdc9848e913632ecc41da4c13/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/VolumetricFogShaderRD/9553afd54d4e534bc65000a710a52dfcc81830fc44f583d147f5261309aaa120/9a227745af2d65830f930370a9fbba551fbd6f60.d3d12.cache b/.godot/shader_cache/VolumetricFogShaderRD/9553afd54d4e534bc65000a710a52dfcc81830fc44f583d147f5261309aaa120/9a227745af2d65830f930370a9fbba551fbd6f60.d3d12.cache new file mode 100644 index 0000000..0967f82 Binary files /dev/null and b/.godot/shader_cache/VolumetricFogShaderRD/9553afd54d4e534bc65000a710a52dfcc81830fc44f583d147f5261309aaa120/9a227745af2d65830f930370a9fbba551fbd6f60.d3d12.cache differ diff --git a/.godot/shader_cache/VoxelGiDebugShaderRD/b19253aa479adf75e17932fd850c1f8fe619717d7686f41aa47ca44283a9009e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/VoxelGiDebugShaderRD/b19253aa479adf75e17932fd850c1f8fe619717d7686f41aa47ca44283a9009e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..5b7e09e Binary files /dev/null and b/.godot/shader_cache/VoxelGiDebugShaderRD/b19253aa479adf75e17932fd850c1f8fe619717d7686f41aa47ca44283a9009e/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/VoxelGiShaderRD/cab26a3c5484ec1e7e517e72222e790d8902a75da0ec07d9f15bb8fb75179087/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/VoxelGiShaderRD/cab26a3c5484ec1e7e517e72222e790d8902a75da0ec07d9f15bb8fb75179087/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..9dee5ff Binary files /dev/null and b/.godot/shader_cache/VoxelGiShaderRD/cab26a3c5484ec1e7e517e72222e790d8902a75da0ec07d9f15bb8fb75179087/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/shader_cache/VrsShaderRD/f2e8b50f7d08d7f2fb833a3d0b79692774033784a48a58f61feaa4b7e6c48765/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache b/.godot/shader_cache/VrsShaderRD/f2e8b50f7d08d7f2fb833a3d0b79692774033784a48a58f61feaa4b7e6c48765/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache new file mode 100644 index 0000000..7361e76 Binary files /dev/null and b/.godot/shader_cache/VrsShaderRD/f2e8b50f7d08d7f2fb833a3d0b79692774033784a48a58f61feaa4b7e6c48765/087916079fba7c625e62b0c2cca570e0fb87c99a.d3d12.cache differ diff --git a/.godot/uid_cache.bin b/.godot/uid_cache.bin new file mode 100644 index 0000000..8c2cf73 Binary files /dev/null and b/.godot/uid_cache.bin differ diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..185530a --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,84 @@ +# Pingpang + +乒乓球对战游戏 — Godot 4.6 + C++ GDExtension + +## 项目结构 + +``` +pingpang/ +├── CMakeLists.txt # CMake 构建配置 +├── build-pingpang.bat # Windows 一键编译脚本 +├── godot-cpp/ # Godot C++ 绑定(git submodule, 4.5 分支) +├── src/ # C++ 源码 +│ ├── register_types.cpp/h # GDExtension 入口 + 类注册 +│ ├── pingpong_ball.cpp/h # 球(移动、碰撞、得分检测) +│ ├── pingpong_paddle.cpp/h # 球拍(玩家输入 / AI) +│ └── pingpong_game.cpp/h # 游戏管理(计分、状态) +├── main/ # Godot 项目目录 +│ ├── project.godot # Godot 项目配置 +│ ├── pingpang.gdextension # GDExtension 加载配置 +│ ├── scenes/ +│ │ └── main.tscn # 主场景 +│ ├── bin/ # 编译产物(gitignore) +│ │ └── pingpang.dll +│ └── .godot/ # Godot 编辑器数据(gitignore) +└── bin/ # 历史遗留(即将清理) +``` + +## 开发环境 + +| 工具 | 版本/路径 | +|---|---| +| Godot 编辑器 | 4.6 (`F:/PCL/MyDownload/Godot_v4.6-stable_win64.exe`) | +| CMake | VS 2026 自带 | +| Visual Studio | 2026 (`D:/Visual Studio/`) | +| godot-cpp | 4.5 分支 | + +## 编译 & 运行 + +### 编译 C++ 扩展 + +```bash +# Windows: 双击运行 +build-pingpang.bat + +# 或手动 +cmake -S . -B build -G "Visual Studio 18 2026" -A x64 +cmake --build build --config Release +``` + +编译产物 `pingpang.dll` 会自动输出到 `main/bin/`。 + +### 打开 Godot 项目 + +1. 启动 Godot 4.6 编辑器 +2. 导入项目 → 选择 `main/` 目录 +3. 打开后直接按 F5 运行 + +## 核心类说明 + +### PingPongBall (CharacterBody2D) +- `speed: float` — 球速(默认 400) +- `reset()` — 重置到屏幕中央,随机方向发射 +- `scored(which: int)` 信号 — 0=左边得分, 1=右边得分 + +### PingPongPaddle (CharacterBody2D) +- `speed: float` — 移动速度(默认 350) +- `is_player: bool` — true=玩家控制, false=AI +- `ball_path: NodePath` — AI 模式下追踪的球节点 + +### PingPongGame (Node2D) +- `left_score: int` / `right_score: int` — 当前比分 +- `max_score: int` — 获胜分数(默认 5) +- `game_over(winner: int)` 信号 — 0=左边赢, 1=右边赢 + +## 协作指南 + +1. **添加新的 GDExtension 类**: + - 在 `src/` 创建 `.cpp`/`.h` 文件 + - 在 `src/register_types.cpp` 中 `GDREGISTER_CLASS()` + - 在 `CMakeLists.txt` 的 `add_library()` 中添加源文件 + +2. **场景编辑**:在 Godot 编辑器中编辑 `main/scenes/main.tscn`,所有 C++ 类可在节点列表中直接创建 + +3. **提交代码前**:确保 `build-pingpang.bat` 编译通过 diff --git a/CMakeLists.txt b/CMakeLists.txt index 34bccae..8a293ad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.24) -project(marry) +project(pingpang) # 标准 C++17 set(CMAKE_CXX_STANDARD 17) @@ -11,31 +11,34 @@ set(GODOT_CPP_PATH "${CMAKE_CURRENT_SOURCE_DIR}/godot-cpp") add_subdirectory("${GODOT_CPP_PATH}") # 扩展库本体 -add_library(marry SHARED +add_library(pingpang SHARED src/register_types.cpp - src/example.cpp - src/example.h src/register_types.h + src/pingpong_ball.cpp + src/pingpong_ball.h + src/pingpong_paddle.cpp + src/pingpong_paddle.h + src/pingpong_game.cpp + src/pingpong_game.h ) -target_include_directories(marry PRIVATE src) +target_include_directories(pingpang PRIVATE src) # 链接 godot-cpp -target_link_libraries(marry PRIVATE godot-cpp) +target_link_libraries(pingpang PRIVATE godot-cpp) -# 输出到 bin/ 目录(Godot 从那里加载;VS 里编译后 dll 直接落到 res://bin/) -set_target_properties(marry PROPERTIES - LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin" - RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin" - ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin" +# 输出到 main/bin/ 目录(Godot 项目从这里加载 GDExtension) +set_target_properties(pingpang PROPERTIES + LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/main/bin" + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/main/bin" + ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/main/bin" PREFIX "" ) -# VS 多配置生成器会输出到 bin/Release/ 等子目录,这里复制到 bin/ 根目录 -# 保证 .gdextension 里 res://bin/marry.dll 始终能找到 -add_custom_command(TARGET marry POST_BUILD +# VS 多配置生成器会输出到子目录,这里复制到 main/bin/ 根目录 +add_custom_command(TARGET pingpang POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different - "$" - "${CMAKE_CURRENT_SOURCE_DIR}/bin/marry.dll" - COMMENT "复制 marry.dll 到 bin/ 根目录" + "$" + "${CMAKE_CURRENT_SOURCE_DIR}/main/bin/$" + COMMENT "复制 pingpang.dll 到 main/bin/ 根目录" ) diff --git a/bin/Release/marry.dll b/bin/Release/marry.dll new file mode 100644 index 0000000..081aad4 Binary files /dev/null and b/bin/Release/marry.dll differ diff --git a/bin/Release/marry.exp b/bin/Release/marry.exp new file mode 100644 index 0000000..03b22b0 Binary files /dev/null and b/bin/Release/marry.exp differ diff --git a/bin/Release/marry.lib b/bin/Release/marry.lib new file mode 100644 index 0000000..1e3994b Binary files /dev/null and b/bin/Release/marry.lib differ diff --git a/bin/marry.dll b/bin/marry.dll new file mode 100644 index 0000000..081aad4 Binary files /dev/null and b/bin/marry.dll differ diff --git a/build-marry.bat b/build-pingpang.bat similarity index 93% rename from build-marry.bat rename to build-pingpang.bat index 4d4a2b5..dea161b 100644 --- a/build-marry.bat +++ b/build-pingpang.bat @@ -6,4 +6,4 @@ echo === CMake Configure (VS 2026) === echo === Build === "D:\Visual Studio\IDE\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" --build build --config Release echo === Result === -dir E:\newgame\marry\bin +dir E:\newgame\marry\main\bin diff --git a/build_output.txt b/build_output.txt new file mode 100644 index 0000000..0f5c296 --- /dev/null +++ b/build_output.txt @@ -0,0 +1,9 @@ +适用于 .NET Framework MSBuild 版本 18.5.4+cb4e32d21 + + Checking File Globs + godot-cpp.vcxproj -> E:\newgame\marry\build\bin\libgodot-cpp.windows.template_debug.x86_64.lib + pingpong_ball.cpp + 正在创建库 E:/newgame/marry/main/bin/Release/pingpang.lib 和对象 E:/newgame/marry/main/bin/Release/pingpang.exp + pingpang.vcxproj -> E:\newgame\marry\main\bin\Release\pingpang.dll + 复制 pingpang.dll 到 main/bin/ 根目录 + Building Custom Rule E:/newgame/marry/CMakeLists.txt diff --git a/main/pingpang.gdextension b/main/pingpang.gdextension new file mode 100644 index 0000000..439531c --- /dev/null +++ b/main/pingpang.gdextension @@ -0,0 +1,8 @@ +[configuration] +entry_symbol = "pingpang_library_init" +compatibility_minimum = "4.5" + +[libraries] +windows.x86_64 = "res://bin/pingpang.dll" +linux.x86_64 = "res://bin/libpingpang.so" +macos.universal = "res://bin/libpingpang.dylib" diff --git a/main/project.godot b/main/project.godot index a34766d..5b9d403 100644 --- a/main/project.godot +++ b/main/project.godot @@ -10,14 +10,16 @@ config_version=5 [application] -config/name="main" +config/name="Pingpang" config/features=PackedStringArray("4.6", "Forward Plus") config/icon="res://icon.svg" +run/main_scene="res://scenes/main.tscn" + [physics] -3d/physics_engine="Jolt Physics" +common/enable_2d_physics=true [rendering] -rendering_device/driver.windows="d3d12" +renderer/rendering_method="forward_plus" diff --git a/main/scenes/main.tscn b/main/scenes/main.tscn new file mode 100644 index 0000000..1aff08a --- /dev/null +++ b/main/scenes/main.tscn @@ -0,0 +1,59 @@ +[gd_scene load_steps=4 format=3] + +[sub_resource type="CircleShape2D" id="circle_ball"] +radius = 12.0 + +[sub_resource type="RectangleShape2D" id="rect_paddle"] +size = Vector2(20.0, 120.0) + +[node name="Game" type="PingPongGame"] + +[node name="Ball" type="PingPongBall" parent="Game"] +position = Vector2(576.0, 324.0) + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Game/Ball"] +shape = SubResource("circle_ball") + +[node name="LeftPaddle" type="PingPongPaddle" parent="Game"] +position = Vector2(50.0, 324.0) +is_player = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Game/LeftPaddle"] +shape = SubResource("rect_paddle") + +[node name="RightPaddle" type="PingPongPaddle" parent="Game"] +position = Vector2(1102.0, 324.0) +is_player = false +ball_path = NodePath("../Ball") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Game/RightPaddle"] +shape = SubResource("rect_paddle") + +[node name="UI" type="CanvasLayer" parent="Game"] + +[node name="LeftScore" type="Label" parent="Game/UI"] +offset_left = 200.0 +offset_top = 20.0 +offset_right = 400.0 +offset_bottom = 70.0 +text = "0" +horizontal_alignment = 1 +theme_override_font_sizes/font_size = 48 +theme_override_colors/font_color = Color(1.0, 1.0, 1.0, 1.0) + +[node name="RightScore" type="Label" parent="Game/UI"] +offset_left = 752.0 +offset_top = 20.0 +offset_right = 952.0 +offset_bottom = 70.0 +text = "0" +horizontal_alignment = 1 +theme_override_font_sizes/font_size = 48 +theme_override_colors/font_color = Color(1.0, 1.0, 1.0, 1.0) + +[node name="CenterLine" type="ColorRect" parent="Game/UI"] +offset_left = 574.0 +offset_top = 0.0 +offset_right = 578.0 +offset_bottom = 648.0 +color = Color(1.0, 1.0, 1.0, 0.1) diff --git a/marry.gdextension b/marry.gdextension deleted file mode 100644 index bd40da4..0000000 --- a/marry.gdextension +++ /dev/null @@ -1,8 +0,0 @@ -[configuration] -entry_symbol = "marry_library_init" -compatibility_minimum = "4.5" - -[libraries] -windows.x86_64 = "res://bin/marry.dll" -linux.x86_64 = "res://bin/libmarry.so" -macos.universal = "res://bin/libmarry.dylib" diff --git a/project.godot b/project.godot deleted file mode 100644 index 46cb952..0000000 --- a/project.godot +++ /dev/null @@ -1,23 +0,0 @@ -; Engine configuration file. -; It's best edited using the editor UI and not directly, -; since the parameters that go here are not all obvious. -; -; Format: -; [section] ; section goes between [] -; param=value ; assign values to parameters - -config_version=5 - -[application] - -config/name="新建游戏项目" -config/features=PackedStringArray("4.6", "Forward Plus") -config/icon="res://icon.svg" - -[physics] - -3d/physics_engine="Jolt Physics" - -[rendering] - -rendering_device/driver.windows="d3d12" diff --git a/src/example.cpp b/src/example.cpp deleted file mode 100644 index ef7353d..0000000 --- a/src/example.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "example.h" - -#include -#include -#include - -using namespace godot; - -void MyMath::_bind_methods() { - // 把 C++ 方法注册给 GDScript 调用 - ClassDB::bind_method(D_METHOD("add", "a", "b"), &MyMath::add); -} - -MyMath::MyMath() { -} - -MyMath::~MyMath() { -} - -int MyMath::add(int a, int b) { - return a + b; -} diff --git a/src/example.h b/src/example.h deleted file mode 100644 index f1594aa..0000000 --- a/src/example.h +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef MARRY_EXAMPLE_H -#define MARRY_EXAMPLE_H - -#include - -namespace godot { - -// 示例 C++ 类:在 GDScript 里可以直接用 MyMath.new() 创建 -// 之后把你的 C++ 逻辑类都加在这里 -class MyMath : public RefCounted { - GDCLASS(MyMath, RefCounted) - -protected: - static void _bind_methods(); - -public: - MyMath(); - ~MyMath(); - - // 示例方法:加法(GDScript 调用: m.add(3, 4) -> 7) - int add(int a, int b); -}; - -} - -#endif // MARRY_EXAMPLE_H diff --git a/src/pingpong_ball.cpp b/src/pingpong_ball.cpp new file mode 100644 index 0000000..24050a5 --- /dev/null +++ b/src/pingpong_ball.cpp @@ -0,0 +1,136 @@ +#include "pingpong_ball.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +using namespace godot; + +void PingPongBall::_bind_methods() { + // 属性 + ClassDB::bind_method(D_METHOD("get_speed"), &PingPongBall::get_speed); + ClassDB::bind_method(D_METHOD("set_speed", "value"), &PingPongBall::set_speed); + ClassDB::add_property("PingPongBall", PropertyInfo(Variant::FLOAT, "speed"), "set_speed", "get_speed"); + + // 方法 + ClassDB::bind_method(D_METHOD("reset"), &PingPongBall::reset); + + // 信号 + ADD_SIGNAL(MethodInfo("scored", PropertyInfo(Variant::INT, "which"))); +} + +PingPongBall::PingPongBall() { + speed = 400.0f; +} + +PingPongBall::~PingPongBall() { +} + +void PingPongBall::_ready() { + reset(); +} + +void PingPongBall::_draw() { + // 画一个白色圆形表示球 + draw_circle(Vector2(0.0f, 0.0f), 12.0f, Color(1.0f, 1.0f, 1.0f)); +} + +void PingPongBall::_physics_process(double delta) { + queue_redraw(); + Vector2 velocity = direction * speed * (float)delta; + + Ref collision = move_and_collide(velocity); + + if (collision.is_valid()) { + // 计算反弹方向 + Vector2 normal = collision->get_normal(); + direction = direction.bounce(normal); + + // 根据碰撞法线判断碰撞对象类型 + // 法线主要水平 → 碰到球拍(左右反弹) + // 法线主要垂直 → 碰到上下墙(上下反弹) + // 如果法线接近水平且球已经接近左右边界 → 得分 + Object *collider = collision->get_collider(); + if (collider) { + Node *collider_node = Object::cast_to(collider); + if (collider_node) { + StringName node_name = collider_node->get_name(); + // 判断是不是球拍(球拍名字包含 "Paddle") + if (node_name.find("Paddle") != -1) { + // 碰到球拍,微调角度(根据击中位置) + Node2D *collider_2d = Object::cast_to(collider_node); + if (collider_2d) { + float hit_offset = (get_global_position().y - collider_2d->get_global_position().y) / 60.0f; + hit_offset = CLAMP(hit_offset, -1.0f, 1.0f); + direction.y += hit_offset * 0.5f; + direction = direction.normalized(); + } + } + } + } + + // 确保方向始终有效 + direction = direction.normalized(); + } + + // 检测是否出界(得分判定) + Viewport *viewport = get_viewport(); + if (viewport) { + Vector2 screen_size = viewport->get_visible_rect().size; + Vector2 pos = get_global_position(); + + if (pos.x < -50.0f) { + // 球从左边出界,右边得分 + emit_signal("scored", 1); + reset(); + } else if (pos.x > screen_size.x + 50.0f) { + // 球从右边出界,左边得分 + emit_signal("scored", 0); + reset(); + } + + // Y 方向边界限制(防止飞出屏幕) + if (pos.y < 0.0f) { + set_global_position(Vector2(pos.x, 0.0f)); + direction.y = std::abs(direction.y); + } else if (pos.y > screen_size.y) { + set_global_position(Vector2(pos.x, screen_size.y)); + direction.y = -std::abs(direction.y); + } + } +} + +void PingPongBall::reset() { + // 回到屏幕中央 + Viewport *viewport = get_viewport(); + if (viewport) { + Vector2 screen_size = viewport->get_visible_rect().size; + set_global_position(screen_size / 2.0f); + } else { + set_global_position(Vector2(640.0f, 360.0f)); + } + + // 随机方向(-45° 到 45° 之间,向左或向右随机) + float angle = (UtilityFunctions::randf() - 0.5f) * Math_PI / 2.0f; // -45° ~ 45° + int side = (UtilityFunctions::randf() > 0.5f) ? 1 : -1; + direction = Vector2((float)side * std::cos(angle), std::sin(angle)).normalized(); + + // 确保水平分量足够(避免球过于垂直) + if (std::abs(direction.x) < 0.3f) { + direction.x = (direction.x > 0 ? 1.0f : -1.0f) * 0.3f; + direction = direction.normalized(); + } +} + +void PingPongBall::set_speed(float p_speed) { + speed = p_speed; +} + +float PingPongBall::get_speed() const { + return speed; +} diff --git a/src/pingpong_ball.h b/src/pingpong_ball.h new file mode 100644 index 0000000..bde96c4 --- /dev/null +++ b/src/pingpong_ball.h @@ -0,0 +1,38 @@ +#ifndef PINGPONG_BALL_H +#define PINGPONG_BALL_H + +#include + +namespace godot { + +class PingPongBall : public CharacterBody2D { + GDCLASS(PingPongBall, CharacterBody2D) + +private: + float speed = 300.0f; + Vector2 direction = Vector2(1.0f, 0.0f); + +protected: + static void _bind_methods(); + +public: + PingPongBall(); + ~PingPongBall(); + + void _physics_process(double delta) override; + void _ready() override; + void _draw() override; + + // 重置球到屏幕中央,以随机角度发射 + void reset(); + + // 属性 getter/setter + void set_speed(float p_speed); + float get_speed() const; + + // 信号: scored(int which) — 0=左边得分, 1=右边得分 +}; + +} + +#endif // PINGPONG_BALL_H diff --git a/src/pingpong_game.cpp b/src/pingpong_game.cpp new file mode 100644 index 0000000..9316ec2 --- /dev/null +++ b/src/pingpong_game.cpp @@ -0,0 +1,114 @@ +#include "pingpong_game.h" +#include "pingpong_ball.h" + +#include +#include +#include +#include + +using namespace godot; + +void PingPongGame::_bind_methods() { + // 属性 + ClassDB::bind_method(D_METHOD("get_left_score"), &PingPongGame::get_left_score); + ClassDB::bind_method(D_METHOD("set_left_score", "value"), &PingPongGame::set_left_score); + ClassDB::add_property("PingPongGame", PropertyInfo(Variant::INT, "left_score"), "set_left_score", "get_left_score"); + + ClassDB::bind_method(D_METHOD("get_right_score"), &PingPongGame::get_right_score); + ClassDB::bind_method(D_METHOD("set_right_score", "value"), &PingPongGame::set_right_score); + ClassDB::add_property("PingPongGame", PropertyInfo(Variant::INT, "right_score"), "set_right_score", "get_right_score"); + + ClassDB::bind_method(D_METHOD("get_max_score"), &PingPongGame::get_max_score); + ClassDB::bind_method(D_METHOD("set_max_score", "value"), &PingPongGame::set_max_score); + ClassDB::add_property("PingPongGame", PropertyInfo(Variant::INT, "max_score"), "set_max_score", "get_max_score"); + + // 方法 + ClassDB::bind_method(D_METHOD("reset_game"), &PingPongGame::reset_game); + ClassDB::bind_method(D_METHOD("_on_ball_scored", "which"), &PingPongGame::_on_ball_scored); + + // 信号 + ADD_SIGNAL(MethodInfo("game_over", PropertyInfo(Variant::INT, "winner"))); +} + +PingPongGame::PingPongGame() { + left_score = 0; + right_score = 0; + max_score = 5; +} + +PingPongGame::~PingPongGame() { +} + +void PingPongGame::_ready() { + // 查找比分 Label + left_score_label = Object::cast_to