diff options
76 files changed, 1684 insertions, 1475 deletions
@@ -34,3 +34,4 @@ rust/Cargo.lock rust/debug/ target/ tramp +make.bat diff --git a/godot/assets/fonts/format.otf b/godot/assets/fonts/format.otf Binary files differnew file mode 100644 index 0000000..129be34 --- /dev/null +++ b/godot/assets/fonts/format.otf diff --git a/godot/assets/fonts/format.tres b/godot/assets/fonts/format.tres new file mode 100644 index 0000000..9020d9c --- /dev/null +++ b/godot/assets/fonts/format.tres @@ -0,0 +1,7 @@ +[gd_resource type="DynamicFont" load_steps=2 format=2] + +[ext_resource path="res://assets/fonts/format.otf" type="DynamicFontData" id=1] + +[resource] +size = 50 +font_data = ExtResource( 1 ) diff --git a/godot/assets/game_objects/W8.gltf.import b/godot/assets/game_objects/W8.gltf.import index 5927656..f578268 100644 --- a/godot/assets/game_objects/W8.gltf.import +++ b/godot/assets/game_objects/W8.gltf.import @@ -1,1065 +1,3 @@ -[remap] - -importer="scene" -type="PackedScene" -path="res://.import/W8.gltf-131bd1b69ba26b8b06eb65df084f0320.scn" - -[deps] - -source_file="res://assets/game_objects/W8.gltf" -dest_files=[ "res://.import/W8.gltf-131bd1b69ba26b8b06eb65df084f0320.scn" ] - -[params] - -nodes/root_type="Spatial" -nodes/root_name="Scene Root" -nodes/root_scale=1.0 -nodes/custom_script="" -nodes/storage=0 -nodes/use_legacy_names=false -materials/location=1 -materials/storage=1 -materials/keep_on_reimport=true -meshes/octahedral_compression=true -meshes/compress=4286 -meshes/ensure_tangents=true -meshes/storage=0 -meshes/light_baking=0 -meshes/lightmap_texel_size=0.1 -skins/use_named_skins=true -external_files/store_in_subdir=false -animation/import=true -animation/fps=15 -animation/filter_script="" -animation/storage=false -animation/keep_custom_tracks=false -animation/optimizer/enabled=true -animation/optimizer/max_linear_error=0.05 -animation/optimizer/max_angular_error=0.01 -animation/optimizer/max_angle=22 -animation/optimizer/remove_unused_tracks=true -animation/clips/amount=0 -animation/clip_1/name="" -animation/clip_1/start_frame=0 -animation/clip_1/end_frame=0 -animation/clip_1/loops=false -animation/clip_2/name="" -animation/clip_2/start_frame=0 -animation/clip_2/end_frame=0 -animation/clip_2/loops=false -animation/clip_3/name="" -animation/clip_3/start_frame=0 -animation/clip_3/end_frame=0 -animation/clip_3/loops=false -animation/clip_4/name="" -animation/clip_4/start_frame=0 -animation/clip_4/end_frame=0 -animation/clip_4/loops=false -animation/clip_5/name="" -animation/clip_5/start_frame=0 -animation/clip_5/end_frame=0 -animation/clip_5/loops=false -animation/clip_6/name="" -animation/clip_6/start_frame=0 -animation/clip_6/end_frame=0 -animation/clip_6/loops=false -animation/clip_7/name="" -animation/clip_7/start_frame=0 -animation/clip_7/end_frame=0 -animation/clip_7/loops=false -animation/clip_8/name="" -animation/clip_8/start_frame=0 -animation/clip_8/end_frame=0 -animation/clip_8/loops=false -animation/clip_9/name="" -animation/clip_9/start_frame=0 -animation/clip_9/end_frame=0 -animation/clip_9/loops=false -animation/clip_10/name="" -animation/clip_10/start_frame=0 -animation/clip_10/end_frame=0 -animation/clip_10/loops=false -animation/clip_11/name="" -animation/clip_11/start_frame=0 -animation/clip_11/end_frame=0 -animation/clip_11/loops=false -animation/clip_12/name="" -animation/clip_12/start_frame=0 -animation/clip_12/end_frame=0 -animation/clip_12/loops=false -animation/clip_13/name="" -animation/clip_13/start_frame=0 -animation/clip_13/end_frame=0 -animation/clip_13/loops=false -animation/clip_14/name="" -animation/clip_14/start_frame=0 -animation/clip_14/end_frame=0 -animation/clip_14/loops=false -animation/clip_15/name="" -animation/clip_15/start_frame=0 -animation/clip_15/end_frame=0 -animation/clip_15/loops=false -animation/clip_16/name="" -animation/clip_16/start_frame=0 -animation/clip_16/end_frame=0 -animation/clip_16/loops=false -animation/clip_17/name="" -animation/clip_17/start_frame=0 -animation/clip_17/end_frame=0 -animation/clip_17/loops=false -animation/clip_18/name="" -animation/clip_18/start_frame=0 -animation/clip_18/end_frame=0 -animation/clip_18/loops=false -animation/clip_19/name="" -animation/clip_19/start_frame=0 -animation/clip_19/end_frame=0 -animation/clip_19/loops=false -animation/clip_20/name="" -animation/clip_20/start_frame=0 -animation/clip_20/end_frame=0 -animation/clip_20/loops=false -animation/clip_21/name="" -animation/clip_21/start_frame=0 -animation/clip_21/end_frame=0 -animation/clip_21/loops=false -animation/clip_22/name="" -animation/clip_22/start_frame=0 -animation/clip_22/end_frame=0 -animation/clip_22/loops=false -animation/clip_23/name="" -animation/clip_23/start_frame=0 -animation/clip_23/end_frame=0 -animation/clip_23/loops=false -animation/clip_24/name="" -animation/clip_24/start_frame=0 -animation/clip_24/end_frame=0 -animation/clip_24/loops=false -animation/clip_25/name="" -animation/clip_25/start_frame=0 -animation/clip_25/end_frame=0 -animation/clip_25/loops=false -animation/clip_26/name="" -animation/clip_26/start_frame=0 -animation/clip_26/end_frame=0 -animation/clip_26/loops=false -animation/clip_27/name="" -animation/clip_27/start_frame=0 -animation/clip_27/end_frame=0 -animation/clip_27/loops=false -animation/clip_28/name="" -animation/clip_28/start_frame=0 -animation/clip_28/end_frame=0 -animation/clip_28/loops=false -animation/clip_29/name="" -animation/clip_29/start_frame=0 -animation/clip_29/end_frame=0 -animation/clip_29/loops=false -animation/clip_30/name="" -animation/clip_30/start_frame=0 -animation/clip_30/end_frame=0 -animation/clip_30/loops=false -animation/clip_31/name="" -animation/clip_31/start_frame=0 -animation/clip_31/end_frame=0 -animation/clip_31/loops=false -animation/clip_32/name="" -animation/clip_32/start_frame=0 -animation/clip_32/end_frame=0 -animation/clip_32/loops=false -animation/clip_33/name="" -animation/clip_33/start_frame=0 -animation/clip_33/end_frame=0 -animation/clip_33/loops=false -animation/clip_34/name="" -animation/clip_34/start_frame=0 -animation/clip_34/end_frame=0 -animation/clip_34/loops=false -animation/clip_35/name="" -animation/clip_35/start_frame=0 -animation/clip_35/end_frame=0 -animation/clip_35/loops=false -animation/clip_36/name="" -animation/clip_36/start_frame=0 -animation/clip_36/end_frame=0 -animation/clip_36/loops=false -animation/clip_37/name="" -animation/clip_37/start_frame=0 -animation/clip_37/end_frame=0 -animation/clip_37/loops=false -animation/clip_38/name="" -animation/clip_38/start_frame=0 -animation/clip_38/end_frame=0 -animation/clip_38/loops=false -animation/clip_39/name="" -animation/clip_39/start_frame=0 -animation/clip_39/end_frame=0 -animation/clip_39/loops=false -animation/clip_40/name="" -animation/clip_40/start_frame=0 -animation/clip_40/end_frame=0 -animation/clip_40/loops=false -animation/clip_41/name="" -animation/clip_41/start_frame=0 -animation/clip_41/end_frame=0 -animation/clip_41/loops=false -animation/clip_42/name="" -animation/clip_42/start_frame=0 -animation/clip_42/end_frame=0 -animation/clip_42/loops=false -animation/clip_43/name="" -animation/clip_43/start_frame=0 -animation/clip_43/end_frame=0 -animation/clip_43/loops=false -animation/clip_44/name="" -animation/clip_44/start_frame=0 -animation/clip_44/end_frame=0 -animation/clip_44/loops=false -animation/clip_45/name="" -animation/clip_45/start_frame=0 -animation/clip_45/end_frame=0 -animation/clip_45/loops=false -animation/clip_46/name="" -animation/clip_46/start_frame=0 -animation/clip_46/end_frame=0 -animation/clip_46/loops=false -animation/clip_47/name="" -animation/clip_47/start_frame=0 -animation/clip_47/end_frame=0 -animation/clip_47/loops=false -animation/clip_48/name="" -animation/clip_48/start_frame=0 -animation/clip_48/end_frame=0 -animation/clip_48/loops=false -animation/clip_49/name="" -animation/clip_49/start_frame=0 -animation/clip_49/end_frame=0 -animation/clip_49/loops=false -animation/clip_50/name="" -animation/clip_50/start_frame=0 -animation/clip_50/end_frame=0 -animation/clip_50/loops=false -animation/clip_51/name="" -animation/clip_51/start_frame=0 -animation/clip_51/end_frame=0 -animation/clip_51/loops=false -animation/clip_52/name="" -animation/clip_52/start_frame=0 -animation/clip_52/end_frame=0 -animation/clip_52/loops=false -animation/clip_53/name="" -animation/clip_53/start_frame=0 -animation/clip_53/end_frame=0 -animation/clip_53/loops=false -animation/clip_54/name="" -animation/clip_54/start_frame=0 -animation/clip_54/end_frame=0 -animation/clip_54/loops=false -animation/clip_55/name="" -animation/clip_55/start_frame=0 -animation/clip_55/end_frame=0 -animation/clip_55/loops=false -animation/clip_56/name="" -animation/clip_56/start_frame=0 -animation/clip_56/end_frame=0 -animation/clip_56/loops=false -animation/clip_57/name="" -animation/clip_57/start_frame=0 -animation/clip_57/end_frame=0 -animation/clip_57/loops=false -animation/clip_58/name="" -animation/clip_58/start_frame=0 -animation/clip_58/end_frame=0 -animation/clip_58/loops=false -animation/clip_59/name="" -animation/clip_59/start_frame=0 -animation/clip_59/end_frame=0 -animation/clip_59/loops=false -animation/clip_60/name="" -animation/clip_60/start_frame=0 -animation/clip_60/end_frame=0 -animation/clip_60/loops=false -animation/clip_61/name="" -animation/clip_61/start_frame=0 -animation/clip_61/end_frame=0 -animation/clip_61/loops=false -animation/clip_62/name="" -animation/clip_62/start_frame=0 -animation/clip_62/end_frame=0 -animation/clip_62/loops=false -animation/clip_63/name="" -animation/clip_63/start_frame=0 -animation/clip_63/end_frame=0 -animation/clip_63/loops=false -animation/clip_64/name="" -animation/clip_64/start_frame=0 -animation/clip_64/end_frame=0 -animation/clip_64/loops=false -animation/clip_65/name="" -animation/clip_65/start_frame=0 -animation/clip_65/end_frame=0 -animation/clip_65/loops=false -animation/clip_66/name="" -animation/clip_66/start_frame=0 -animation/clip_66/end_frame=0 -animation/clip_66/loops=false -animation/clip_67/name="" -animation/clip_67/start_frame=0 -animation/clip_67/end_frame=0 -animation/clip_67/loops=false -animation/clip_68/name="" -animation/clip_68/start_frame=0 -animation/clip_68/end_frame=0 -animation/clip_68/loops=false -animation/clip_69/name="" -animation/clip_69/start_frame=0 -animation/clip_69/end_frame=0 -animation/clip_69/loops=false -animation/clip_70/name="" -animation/clip_70/start_frame=0 -animation/clip_70/end_frame=0 -animation/clip_70/loops=false -animation/clip_71/name="" -animation/clip_71/start_frame=0 -animation/clip_71/end_frame=0 -animation/clip_71/loops=false -animation/clip_72/name="" -animation/clip_72/start_frame=0 -animation/clip_72/end_frame=0 -animation/clip_72/loops=false -animation/clip_73/name="" -animation/clip_73/start_frame=0 -animation/clip_73/end_frame=0 -animation/clip_73/loops=false -animation/clip_74/name="" -animation/clip_74/start_frame=0 -animation/clip_74/end_frame=0 -animation/clip_74/loops=false -animation/clip_75/name="" -animation/clip_75/start_frame=0 -animation/clip_75/end_frame=0 -animation/clip_75/loops=false -animation/clip_76/name="" -animation/clip_76/start_frame=0 -animation/clip_76/end_frame=0 -animation/clip_76/loops=false -animation/clip_77/name="" -animation/clip_77/start_frame=0 -animation/clip_77/end_frame=0 -animation/clip_77/loops=false -animation/clip_78/name="" -animation/clip_78/start_frame=0 -animation/clip_78/end_frame=0 -animation/clip_78/loops=false -animation/clip_79/name="" -animation/clip_79/start_frame=0 -animation/clip_79/end_frame=0 -animation/clip_79/loops=false -animation/clip_80/name="" -animation/clip_80/start_frame=0 -animation/clip_80/end_frame=0 -animation/clip_80/loops=false -animation/clip_81/name="" -animation/clip_81/start_frame=0 -animation/clip_81/end_frame=0 -animation/clip_81/loops=false -animation/clip_82/name="" -animation/clip_82/start_frame=0 -animation/clip_82/end_frame=0 -animation/clip_82/loops=false -animation/clip_83/name="" -animation/clip_83/start_frame=0 -animation/clip_83/end_frame=0 -animation/clip_83/loops=false -animation/clip_84/name="" -animation/clip_84/start_frame=0 -animation/clip_84/end_frame=0 -animation/clip_84/loops=false -animation/clip_85/name="" -animation/clip_85/start_frame=0 -animation/clip_85/end_frame=0 -animation/clip_85/loops=false -animation/clip_86/name="" -animation/clip_86/start_frame=0 -animation/clip_86/end_frame=0 -animation/clip_86/loops=false -animation/clip_87/name="" -animation/clip_87/start_frame=0 -animation/clip_87/end_frame=0 -animation/clip_87/loops=false -animation/clip_88/name="" -animation/clip_88/start_frame=0 -animation/clip_88/end_frame=0 -animation/clip_88/loops=false -animation/clip_89/name="" -animation/clip_89/start_frame=0 -animation/clip_89/end_frame=0 -animation/clip_89/loops=false -animation/clip_90/name="" -animation/clip_90/start_frame=0 -animation/clip_90/end_frame=0 -animation/clip_90/loops=false -animation/clip_91/name="" -animation/clip_91/start_frame=0 -animation/clip_91/end_frame=0 -animation/clip_91/loops=false -animation/clip_92/name="" -animation/clip_92/start_frame=0 -animation/clip_92/end_frame=0 -animation/clip_92/loops=false -animation/clip_93/name="" -animation/clip_93/start_frame=0 -animation/clip_93/end_frame=0 -animation/clip_93/loops=false -animation/clip_94/name="" -animation/clip_94/start_frame=0 -animation/clip_94/end_frame=0 -animation/clip_94/loops=false -animation/clip_95/name="" -animation/clip_95/start_frame=0 -animation/clip_95/end_frame=0 -animation/clip_95/loops=false -animation/clip_96/name="" -animation/clip_96/start_frame=0 -animation/clip_96/end_frame=0 -animation/clip_96/loops=false -animation/clip_97/name="" -animation/clip_97/start_frame=0 -animation/clip_97/end_frame=0 -animation/clip_97/loops=false -animation/clip_98/name="" -animation/clip_98/start_frame=0 -animation/clip_98/end_frame=0 -animation/clip_98/loops=false -animation/clip_99/name="" -animation/clip_99/start_frame=0 -animation/clip_99/end_frame=0 -animation/clip_99/loops=false -animation/clip_100/name="" -animation/clip_100/start_frame=0 -animation/clip_100/end_frame=0 -animation/clip_100/loops=false -animation/clip_101/name="" -animation/clip_101/start_frame=0 -animation/clip_101/end_frame=0 -animation/clip_101/loops=false -animation/clip_102/name="" -animation/clip_102/start_frame=0 -animation/clip_102/end_frame=0 -animation/clip_102/loops=false -animation/clip_103/name="" -animation/clip_103/start_frame=0 -animation/clip_103/end_frame=0 -animation/clip_103/loops=false -animation/clip_104/name="" -animation/clip_104/start_frame=0 -animation/clip_104/end_frame=0 -animation/clip_104/loops=false -animation/clip_105/name="" -animation/clip_105/start_frame=0 -animation/clip_105/end_frame=0 -animation/clip_105/loops=false -animation/clip_106/name="" -animation/clip_106/start_frame=0 -animation/clip_106/end_frame=0 -animation/clip_106/loops=false -animation/clip_107/name="" -animation/clip_107/start_frame=0 -animation/clip_107/end_frame=0 -animation/clip_107/loops=false -animation/clip_108/name="" -animation/clip_108/start_frame=0 -animation/clip_108/end_frame=0 -animation/clip_108/loops=false -animation/clip_109/name="" -animation/clip_109/start_frame=0 -animation/clip_109/end_frame=0 -animation/clip_109/loops=false -animation/clip_110/name="" -animation/clip_110/start_frame=0 -animation/clip_110/end_frame=0 -animation/clip_110/loops=false -animation/clip_111/name="" -animation/clip_111/start_frame=0 -animation/clip_111/end_frame=0 -animation/clip_111/loops=false -animation/clip_112/name="" -animation/clip_112/start_frame=0 -animation/clip_112/end_frame=0 -animation/clip_112/loops=false -animation/clip_113/name="" -animation/clip_113/start_frame=0 -animation/clip_113/end_frame=0 -animation/clip_113/loops=false -animation/clip_114/name="" -animation/clip_114/start_frame=0 -animation/clip_114/end_frame=0 -animation/clip_114/loops=false -animation/clip_115/name="" -animation/clip_115/start_frame=0 -animation/clip_115/end_frame=0 -animation/clip_115/loops=false -animation/clip_116/name="" -animation/clip_116/start_frame=0 -animation/clip_116/end_frame=0 -animation/clip_116/loops=false -animation/clip_117/name="" -animation/clip_117/start_frame=0 -animation/clip_117/end_frame=0 -animation/clip_117/loops=false -animation/clip_118/name="" -animation/clip_118/start_frame=0 -animation/clip_118/end_frame=0 -animation/clip_118/loops=false -animation/clip_119/name="" -animation/clip_119/start_frame=0 -animation/clip_119/end_frame=0 -animation/clip_119/loops=false -animation/clip_120/name="" -animation/clip_120/start_frame=0 -animation/clip_120/end_frame=0 -animation/clip_120/loops=false -animation/clip_121/name="" -animation/clip_121/start_frame=0 -animation/clip_121/end_frame=0 -animation/clip_121/loops=false -animation/clip_122/name="" -animation/clip_122/start_frame=0 -animation/clip_122/end_frame=0 -animation/clip_122/loops=false -animation/clip_123/name="" -animation/clip_123/start_frame=0 -animation/clip_123/end_frame=0 -animation/clip_123/loops=false -animation/clip_124/name="" -animation/clip_124/start_frame=0 -animation/clip_124/end_frame=0 -animation/clip_124/loops=false -animation/clip_125/name="" -animation/clip_125/start_frame=0 -animation/clip_125/end_frame=0 -animation/clip_125/loops=false -animation/clip_126/name="" -animation/clip_126/start_frame=0 -animation/clip_126/end_frame=0 -animation/clip_126/loops=false -animation/clip_127/name="" -animation/clip_127/start_frame=0 -animation/clip_127/end_frame=0 -animation/clip_127/loops=false -animation/clip_128/name="" -animation/clip_128/start_frame=0 -animation/clip_128/end_frame=0 -animation/clip_128/loops=false -animation/clip_129/name="" -animation/clip_129/start_frame=0 -animation/clip_129/end_frame=0 -animation/clip_129/loops=false -animation/clip_130/name="" -animation/clip_130/start_frame=0 -animation/clip_130/end_frame=0 -animation/clip_130/loops=false -animation/clip_131/name="" -animation/clip_131/start_frame=0 -animation/clip_131/end_frame=0 -animation/clip_131/loops=false -animation/clip_132/name="" -animation/clip_132/start_frame=0 -animation/clip_132/end_frame=0 -animation/clip_132/loops=false -animation/clip_133/name="" -animation/clip_133/start_frame=0 -animation/clip_133/end_frame=0 -animation/clip_133/loops=false -animation/clip_134/name="" -animation/clip_134/start_frame=0 -animation/clip_134/end_frame=0 -animation/clip_134/loops=false -animation/clip_135/name="" -animation/clip_135/start_frame=0 -animation/clip_135/end_frame=0 -animation/clip_135/loops=false -animation/clip_136/name="" -animation/clip_136/start_frame=0 -animation/clip_136/end_frame=0 -animation/clip_136/loops=false -animation/clip_137/name="" -animation/clip_137/start_frame=0 -animation/clip_137/end_frame=0 -animation/clip_137/loops=false -animation/clip_138/name="" -animation/clip_138/start_frame=0 -animation/clip_138/end_frame=0 -animation/clip_138/loops=false -animation/clip_139/name="" -animation/clip_139/start_frame=0 -animation/clip_139/end_frame=0 -animation/clip_139/loops=false -animation/clip_140/name="" -animation/clip_140/start_frame=0 -animation/clip_140/end_frame=0 -animation/clip_140/loops=false -animation/clip_141/name="" -animation/clip_141/start_frame=0 -animation/clip_141/end_frame=0 -animation/clip_141/loops=false -animation/clip_142/name="" -animation/clip_142/start_frame=0 -animation/clip_142/end_frame=0 -animation/clip_142/loops=false -animation/clip_143/name="" -animation/clip_143/start_frame=0 -animation/clip_143/end_frame=0 -animation/clip_143/loops=false -animation/clip_144/name="" -animation/clip_144/start_frame=0 -animation/clip_144/end_frame=0 -animation/clip_144/loops=false -animation/clip_145/name="" -animation/clip_145/start_frame=0 -animation/clip_145/end_frame=0 -animation/clip_145/loops=false -animation/clip_146/name="" -animation/clip_146/start_frame=0 -animation/clip_146/end_frame=0 -animation/clip_146/loops=false -animation/clip_147/name="" -animation/clip_147/start_frame=0 -animation/clip_147/end_frame=0 -animation/clip_147/loops=false -animation/clip_148/name="" -animation/clip_148/start_frame=0 -animation/clip_148/end_frame=0 -animation/clip_148/loops=false -animation/clip_149/name="" -animation/clip_149/start_frame=0 -animation/clip_149/end_frame=0 -animation/clip_149/loops=false -animation/clip_150/name="" -animation/clip_150/start_frame=0 -animation/clip_150/end_frame=0 -animation/clip_150/loops=false -animation/clip_151/name="" -animation/clip_151/start_frame=0 -animation/clip_151/end_frame=0 -animation/clip_151/loops=false -animation/clip_152/name="" -animation/clip_152/start_frame=0 -animation/clip_152/end_frame=0 -animation/clip_152/loops=false -animation/clip_153/name="" -animation/clip_153/start_frame=0 -animation/clip_153/end_frame=0 -animation/clip_153/loops=false -animation/clip_154/name="" -animation/clip_154/start_frame=0 -animation/clip_154/end_frame=0 -animation/clip_154/loops=false -animation/clip_155/name="" -animation/clip_155/start_frame=0 -animation/clip_155/end_frame=0 -animation/clip_155/loops=false -animation/clip_156/name="" -animation/clip_156/start_frame=0 -animation/clip_156/end_frame=0 -animation/clip_156/loops=false -animation/clip_157/name="" -animation/clip_157/start_frame=0 -animation/clip_157/end_frame=0 -animation/clip_157/loops=false -animation/clip_158/name="" -animation/clip_158/start_frame=0 -animation/clip_158/end_frame=0 -animation/clip_158/loops=false -animation/clip_159/name="" -animation/clip_159/start_frame=0 -animation/clip_159/end_frame=0 -animation/clip_159/loops=false -animation/clip_160/name="" -animation/clip_160/start_frame=0 -animation/clip_160/end_frame=0 -animation/clip_160/loops=false -animation/clip_161/name="" -animation/clip_161/start_frame=0 -animation/clip_161/end_frame=0 -animation/clip_161/loops=false -animation/clip_162/name="" -animation/clip_162/start_frame=0 -animation/clip_162/end_frame=0 -animation/clip_162/loops=false -animation/clip_163/name="" -animation/clip_163/start_frame=0 -animation/clip_163/end_frame=0 -animation/clip_163/loops=false -animation/clip_164/name="" -animation/clip_164/start_frame=0 -animation/clip_164/end_frame=0 -animation/clip_164/loops=false -animation/clip_165/name="" -animation/clip_165/start_frame=0 -animation/clip_165/end_frame=0 -animation/clip_165/loops=false -animation/clip_166/name="" -animation/clip_166/start_frame=0 -animation/clip_166/end_frame=0 -animation/clip_166/loops=false -animation/clip_167/name="" -animation/clip_167/start_frame=0 -animation/clip_167/end_frame=0 -animation/clip_167/loops=false -animation/clip_168/name="" -animation/clip_168/start_frame=0 -animation/clip_168/end_frame=0 -animation/clip_168/loops=false -animation/clip_169/name="" -animation/clip_169/start_frame=0 -animation/clip_169/end_frame=0 -animation/clip_169/loops=false -animation/clip_170/name="" -animation/clip_170/start_frame=0 -animation/clip_170/end_frame=0 -animation/clip_170/loops=false -animation/clip_171/name="" -animation/clip_171/start_frame=0 -animation/clip_171/end_frame=0 -animation/clip_171/loops=false -animation/clip_172/name="" -animation/clip_172/start_frame=0 -animation/clip_172/end_frame=0 -animation/clip_172/loops=false -animation/clip_173/name="" -animation/clip_173/start_frame=0 -animation/clip_173/end_frame=0 -animation/clip_173/loops=false -animation/clip_174/name="" -animation/clip_174/start_frame=0 -animation/clip_174/end_frame=0 -animation/clip_174/loops=false -animation/clip_175/name="" -animation/clip_175/start_frame=0 -animation/clip_175/end_frame=0 -animation/clip_175/loops=false -animation/clip_176/name="" -animation/clip_176/start_frame=0 -animation/clip_176/end_frame=0 -animation/clip_176/loops=false -animation/clip_177/name="" -animation/clip_177/start_frame=0 -animation/clip_177/end_frame=0 -animation/clip_177/loops=false -animation/clip_178/name="" -animation/clip_178/start_frame=0 -animation/clip_178/end_frame=0 -animation/clip_178/loops=false -animation/clip_179/name="" -animation/clip_179/start_frame=0 -animation/clip_179/end_frame=0 -animation/clip_179/loops=false -animation/clip_180/name="" -animation/clip_180/start_frame=0 -animation/clip_180/end_frame=0 -animation/clip_180/loops=false -animation/clip_181/name="" -animation/clip_181/start_frame=0 -animation/clip_181/end_frame=0 -animation/clip_181/loops=false -animation/clip_182/name="" -animation/clip_182/start_frame=0 -animation/clip_182/end_frame=0 -animation/clip_182/loops=false -animation/clip_183/name="" -animation/clip_183/start_frame=0 -animation/clip_183/end_frame=0 -animation/clip_183/loops=false -animation/clip_184/name="" -animation/clip_184/start_frame=0 -animation/clip_184/end_frame=0 -animation/clip_184/loops=false -animation/clip_185/name="" -animation/clip_185/start_frame=0 -animation/clip_185/end_frame=0 -animation/clip_185/loops=false -animation/clip_186/name="" -animation/clip_186/start_frame=0 -animation/clip_186/end_frame=0 -animation/clip_186/loops=false -animation/clip_187/name="" -animation/clip_187/start_frame=0 -animation/clip_187/end_frame=0 -animation/clip_187/loops=false -animation/clip_188/name="" -animation/clip_188/start_frame=0 -animation/clip_188/end_frame=0 -animation/clip_188/loops=false -animation/clip_189/name="" -animation/clip_189/start_frame=0 -animation/clip_189/end_frame=0 -animation/clip_189/loops=false -animation/clip_190/name="" -animation/clip_190/start_frame=0 -animation/clip_190/end_frame=0 -animation/clip_190/loops=false -animation/clip_191/name="" -animation/clip_191/start_frame=0 -animation/clip_191/end_frame=0 -animation/clip_191/loops=false -animation/clip_192/name="" -animation/clip_192/start_frame=0 -animation/clip_192/end_frame=0 -animation/clip_192/loops=false -animation/clip_193/name="" -animation/clip_193/start_frame=0 -animation/clip_193/end_frame=0 -animation/clip_193/loops=false -animation/clip_194/name="" -animation/clip_194/start_frame=0 -animation/clip_194/end_frame=0 -animation/clip_194/loops=false -animation/clip_195/name="" -animation/clip_195/start_frame=0 -animation/clip_195/end_frame=0 -animation/clip_195/loops=false -animation/clip_196/name="" -animation/clip_196/start_frame=0 -animation/clip_196/end_frame=0 -animation/clip_196/loops=false -animation/clip_197/name="" -animation/clip_197/start_frame=0 -animation/clip_197/end_frame=0 -animation/clip_197/loops=false -animation/clip_198/name="" -animation/clip_198/start_frame=0 -animation/clip_198/end_frame=0 -animation/clip_198/loops=false -animation/clip_199/name="" -animation/clip_199/start_frame=0 -animation/clip_199/end_frame=0 -animation/clip_199/loops=false -animation/clip_200/name="" -animation/clip_200/start_frame=0 -animation/clip_200/end_frame=0 -animation/clip_200/loops=false -animation/clip_201/name="" -animation/clip_201/start_frame=0 -animation/clip_201/end_frame=0 -animation/clip_201/loops=false -animation/clip_202/name="" -animation/clip_202/start_frame=0 -animation/clip_202/end_frame=0 -animation/clip_202/loops=false -animation/clip_203/name="" -animation/clip_203/start_frame=0 -animation/clip_203/end_frame=0 -animation/clip_203/loops=false -animation/clip_204/name="" -animation/clip_204/start_frame=0 -animation/clip_204/end_frame=0 -animation/clip_204/loops=false -animation/clip_205/name="" -animation/clip_205/start_frame=0 -animation/clip_205/end_frame=0 -animation/clip_205/loops=false -animation/clip_206/name="" -animation/clip_206/start_frame=0 -animation/clip_206/end_frame=0 -animation/clip_206/loops=false -animation/clip_207/name="" -animation/clip_207/start_frame=0 -animation/clip_207/end_frame=0 -animation/clip_207/loops=false -animation/clip_208/name="" -animation/clip_208/start_frame=0 -animation/clip_208/end_frame=0 -animation/clip_208/loops=false -animation/clip_209/name="" -animation/clip_209/start_frame=0 -animation/clip_209/end_frame=0 -animation/clip_209/loops=false -animation/clip_210/name="" -animation/clip_210/start_frame=0 -animation/clip_210/end_frame=0 -animation/clip_210/loops=false -animation/clip_211/name="" -animation/clip_211/start_frame=0 -animation/clip_211/end_frame=0 -animation/clip_211/loops=false -animation/clip_212/name="" -animation/clip_212/start_frame=0 -animation/clip_212/end_frame=0 -animation/clip_212/loops=false -animation/clip_213/name="" -animation/clip_213/start_frame=0 -animation/clip_213/end_frame=0 -animation/clip_213/loops=false -animation/clip_214/name="" -animation/clip_214/start_frame=0 -animation/clip_214/end_frame=0 -animation/clip_214/loops=false -animation/clip_215/name="" -animation/clip_215/start_frame=0 -animation/clip_215/end_frame=0 -animation/clip_215/loops=false -animation/clip_216/name="" -animation/clip_216/start_frame=0 -animation/clip_216/end_frame=0 -animation/clip_216/loops=false -animation/clip_217/name="" -animation/clip_217/start_frame=0 -animation/clip_217/end_frame=0 -animation/clip_217/loops=false -animation/clip_218/name="" -animation/clip_218/start_frame=0 -animation/clip_218/end_frame=0 -animation/clip_218/loops=false -animation/clip_219/name="" -animation/clip_219/start_frame=0 -animation/clip_219/end_frame=0 -animation/clip_219/loops=false -animation/clip_220/name="" -animation/clip_220/start_frame=0 -animation/clip_220/end_frame=0 -animation/clip_220/loops=false -animation/clip_221/name="" -animation/clip_221/start_frame=0 -animation/clip_221/end_frame=0 -animation/clip_221/loops=false -animation/clip_222/name="" -animation/clip_222/start_frame=0 -animation/clip_222/end_frame=0 -animation/clip_222/loops=false -animation/clip_223/name="" -animation/clip_223/start_frame=0 -animation/clip_223/end_frame=0 -animation/clip_223/loops=false -animation/clip_224/name="" -animation/clip_224/start_frame=0 -animation/clip_224/end_frame=0 -animation/clip_224/loops=false -animation/clip_225/name="" -animation/clip_225/start_frame=0 -animation/clip_225/end_frame=0 -animation/clip_225/loops=false -animation/clip_226/name="" -animation/clip_226/start_frame=0 -animation/clip_226/end_frame=0 -animation/clip_226/loops=false -animation/clip_227/name="" -animation/clip_227/start_frame=0 -animation/clip_227/end_frame=0 -animation/clip_227/loops=false -animation/clip_228/name="" -animation/clip_228/start_frame=0 -animation/clip_228/end_frame=0 -animation/clip_228/loops=false -animation/clip_229/name="" -animation/clip_229/start_frame=0 -animation/clip_229/end_frame=0 -animation/clip_229/loops=false -animation/clip_230/name="" -animation/clip_230/start_frame=0 -animation/clip_230/end_frame=0 -animation/clip_230/loops=false -animation/clip_231/name="" -animation/clip_231/start_frame=0 -animation/clip_231/end_frame=0 -animation/clip_231/loops=false -animation/clip_232/name="" -animation/clip_232/start_frame=0 -animation/clip_232/end_frame=0 -animation/clip_232/loops=false -animation/clip_233/name="" -animation/clip_233/start_frame=0 -animation/clip_233/end_frame=0 -animation/clip_233/loops=false -animation/clip_234/name="" -animation/clip_234/start_frame=0 -animation/clip_234/end_frame=0 -animation/clip_234/loops=false -animation/clip_235/name="" -animation/clip_235/start_frame=0 -animation/clip_235/end_frame=0 -animation/clip_235/loops=false -animation/clip_236/name="" -animation/clip_236/start_frame=0 -animation/clip_236/end_frame=0 -animation/clip_236/loops=false -animation/clip_237/name="" -animation/clip_237/start_frame=0 -animation/clip_237/end_frame=0 -animation/clip_237/loops=false -animation/clip_238/name="" -animation/clip_238/start_frame=0 -animation/clip_238/end_frame=0 -animation/clip_238/loops=false -animation/clip_239/name="" -animation/clip_239/start_frame=0 -animation/clip_239/end_frame=0 -animation/clip_239/loops=false -animation/clip_240/name="" -animation/clip_240/start_frame=0 -animation/clip_240/end_frame=0 -animation/clip_240/loops=false -animation/clip_241/name="" -animation/clip_241/start_frame=0 -animation/clip_241/end_frame=0 -animation/clip_241/loops=false -animation/clip_242/name="" -animation/clip_242/start_frame=0 -animation/clip_242/end_frame=0 -animation/clip_242/loops=false -animation/clip_243/name="" -animation/clip_243/start_frame=0 -animation/clip_243/end_frame=0 -animation/clip_243/loops=false -animation/clip_244/name="" -animation/clip_244/start_frame=0 -animation/clip_244/end_frame=0 -animation/clip_244/loops=false -animation/clip_245/name="" -animation/clip_245/start_frame=0 -animation/clip_245/end_frame=0 -animation/clip_245/loops=false -animation/clip_246/name="" -animation/clip_246/start_frame=0 -animation/clip_246/end_frame=0 -animation/clip_246/loops=false -animation/clip_247/name="" -animation/clip_247/start_frame=0 -animation/clip_247/end_frame=0 -animation/clip_247/loops=false -animation/clip_248/name="" -animation/clip_248/start_frame=0 -animation/clip_248/end_frame=0 -animation/clip_248/loops=false -animation/clip_249/name="" -animation/clip_249/start_frame=0 -animation/clip_249/end_frame=0 -animation/clip_249/loops=false -animation/clip_250/name="" -animation/clip_250/start_frame=0 -animation/clip_250/end_frame=0 -animation/clip_250/loops=false -animation/clip_251/name="" -animation/clip_251/start_frame=0 -animation/clip_251/end_frame=0 -animation/clip_251/loops=false -animation/clip_252/name="" -animation/clip_252/start_frame=0 -animation/clip_252/end_frame=0 -animation/clip_252/loops=false -animation/clip_253/name="" -animation/clip_253/start_frame=0 -animation/clip_253/end_frame=0 -animation/clip_253/loops=false -animation/clip_254/name="" -animation/clip_254/start_frame=0 -animation/clip_254/end_frame=0 -animation/clip_254/loops=false -animation/clip_255/name="" -animation/clip_255/start_frame=0 -animation/clip_255/end_frame=0 -animation/clip_255/loops=false -animation/clip_256/name="" -animation/clip_256/start_frame=0 -animation/clip_256/end_frame=0 -animation/clip_256/loops=false +version https://git-lfs.github.com/spec/v1 +oid sha256:31aa94244218f79118d2c45bab3282ed3626819c8b64ff2fa34339c0653b8dad +size 31837 diff --git a/godot/assets/game_objects/_defaultMat(Clone).material b/godot/assets/game_objects/_defaultMat(Clone).material Binary files differindex 7d9d927..d253967 100644 --- a/godot/assets/game_objects/_defaultMat(Clone).material +++ b/godot/assets/game_objects/_defaultMat(Clone).material diff --git a/godot/assets/game_objects/asphalt(Clone).material b/godot/assets/game_objects/asphalt(Clone).material Binary files differindex c20cdef..8ac1ddb 100644 --- a/godot/assets/game_objects/asphalt(Clone).material +++ b/godot/assets/game_objects/asphalt(Clone).material diff --git a/godot/assets/game_objects/asphaltEdge(Clone).material b/godot/assets/game_objects/asphaltEdge(Clone).material Binary files differindex 8d1d68d..2efb60a 100644 --- a/godot/assets/game_objects/asphaltEdge(Clone).material +++ b/godot/assets/game_objects/asphaltEdge(Clone).material diff --git a/godot/assets/game_objects/border(Clone).material b/godot/assets/game_objects/border(Clone).material Binary files differindex a62b57c..271d791 100644 --- a/godot/assets/game_objects/border(Clone).material +++ b/godot/assets/game_objects/border(Clone).material diff --git a/godot/assets/game_objects/bricks(Clone).material b/godot/assets/game_objects/bricks(Clone).material Binary files differindex 57fe20e..6ff5b65 100644 --- a/godot/assets/game_objects/bricks(Clone).material +++ b/godot/assets/game_objects/bricks(Clone).material diff --git a/godot/assets/game_objects/colorPurple(Clone).material b/godot/assets/game_objects/colorPurple(Clone).material Binary files differindex 7d5fb56..c1db7de 100644 --- a/godot/assets/game_objects/colorPurple(Clone).material +++ b/godot/assets/game_objects/colorPurple(Clone).material diff --git a/godot/assets/game_objects/colorRed(Clone).material b/godot/assets/game_objects/colorRed(Clone).material Binary files differindex b427ddb..d3ff869 100644 --- a/godot/assets/game_objects/colorRed(Clone).material +++ b/godot/assets/game_objects/colorRed(Clone).material diff --git a/godot/assets/game_objects/colorWhite(Clone).material b/godot/assets/game_objects/colorWhite(Clone).material Binary files differindex e5e1f4d..7350a67 100644 --- a/godot/assets/game_objects/colorWhite(Clone).material +++ b/godot/assets/game_objects/colorWhite(Clone).material diff --git a/godot/assets/game_objects/colorYellow(Clone).material b/godot/assets/game_objects/colorYellow(Clone).material Binary files differindex de297ec..b3669da 100644 --- a/godot/assets/game_objects/colorYellow(Clone).material +++ b/godot/assets/game_objects/colorYellow(Clone).material diff --git a/godot/assets/game_objects/cone(Clone).material b/godot/assets/game_objects/cone(Clone).material Binary files differindex 1c154e0..eddedd6 100644 --- a/godot/assets/game_objects/cone(Clone).material +++ b/godot/assets/game_objects/cone(Clone).material diff --git a/godot/assets/game_objects/diceGolf_track1.glb.import b/godot/assets/game_objects/diceGolf_track1.glb.import new file mode 100644 index 0000000..a97f515 --- /dev/null +++ b/godot/assets/game_objects/diceGolf_track1.glb.import @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99304bfd3485d91b6f95434bc6dc743b2cc7a8784a70703fe2e05ab6f175eee8 +size 31873 diff --git a/godot/assets/game_objects/door(Clone).material b/godot/assets/game_objects/door(Clone).material Binary files differindex 169d73f..e69e399 100644 --- a/godot/assets/game_objects/door(Clone).material +++ b/godot/assets/game_objects/door(Clone).material diff --git a/godot/assets/game_objects/glass(Clone).material b/godot/assets/game_objects/glass(Clone).material index 539a1a6..c83278f 100644 --- a/godot/assets/game_objects/glass(Clone).material +++ b/godot/assets/game_objects/glass(Clone).material @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a9a64980b989b54057860be82a11171ff20971687c072e38cf23263e741d00c0 -size 744 +oid sha256:bf48d47686c386e878fb5b1b1135d3960f305c1ea73ad000287e53e2ba33c7c8 +size 270 diff --git a/godot/assets/game_objects/grass(Clone).material b/godot/assets/game_objects/grass(Clone).material Binary files differindex 581e49b..d967936 100644 --- a/godot/assets/game_objects/grass(Clone).material +++ b/godot/assets/game_objects/grass(Clone).material diff --git a/godot/assets/game_objects/leafsDark(Clone).material b/godot/assets/game_objects/leafsDark(Clone).material Binary files differindex b169b67..3c1a95b 100644 --- a/godot/assets/game_objects/leafsDark(Clone).material +++ b/godot/assets/game_objects/leafsDark(Clone).material diff --git a/godot/assets/game_objects/line(Clone).material b/godot/assets/game_objects/line(Clone).material Binary files differindex 44593c8..21cfd02 100644 --- a/godot/assets/game_objects/line(Clone).material +++ b/godot/assets/game_objects/line(Clone).material diff --git a/godot/assets/game_objects/metalOrange(Clone).material b/godot/assets/game_objects/metalOrange(Clone).material Binary files differindex 75e29a2..88cf887 100644 --- a/godot/assets/game_objects/metalOrange(Clone).material +++ b/godot/assets/game_objects/metalOrange(Clone).material diff --git a/godot/assets/game_objects/pavement(Clone).material b/godot/assets/game_objects/pavement(Clone).material Binary files differindex 97d05a9..f5c3af9 100644 --- a/godot/assets/game_objects/pavement(Clone).material +++ b/godot/assets/game_objects/pavement(Clone).material diff --git a/godot/assets/game_objects/roof(Clone).material b/godot/assets/game_objects/roof(Clone).material Binary files differindex e35c0b6..08b1bda 100644 --- a/godot/assets/game_objects/roof(Clone).material +++ b/godot/assets/game_objects/roof(Clone).material diff --git a/godot/assets/game_objects/steel(Clone).material b/godot/assets/game_objects/steel(Clone).material Binary files differindex 766baef..c5b3e6c 100644 --- a/godot/assets/game_objects/steel(Clone).material +++ b/godot/assets/game_objects/steel(Clone).material diff --git a/godot/assets/game_objects/stone(Clone).material b/godot/assets/game_objects/stone(Clone).material Binary files differindex 499b886..d3491ac 100644 --- a/godot/assets/game_objects/stone(Clone).material +++ b/godot/assets/game_objects/stone(Clone).material diff --git a/godot/assets/game_objects/stoneDark(Clone).material b/godot/assets/game_objects/stoneDark(Clone).material Binary files differindex c53decb..f6f1fec 100644 --- a/godot/assets/game_objects/stoneDark(Clone).material +++ b/godot/assets/game_objects/stoneDark(Clone).material diff --git a/godot/assets/game_objects/stoneLight(Clone).material b/godot/assets/game_objects/stoneLight(Clone).material index 292845a..3629201 100644 --- a/godot/assets/game_objects/stoneLight(Clone).material +++ b/godot/assets/game_objects/stoneLight(Clone).material @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a2301d2b02bba64ab8864c3c6400a4da0c0517c14717505d3da3093aa2ca0b1a -size 764 +oid sha256:f5181fae2dfe1da3cf826d7e68e8f97f60871248e0364ef80327630da8c7ba15 +size 270 diff --git a/godot/assets/game_objects/trim(Clone).material b/godot/assets/game_objects/trim(Clone).material Binary files differindex c2e00a2..c60b5c8 100644 --- a/godot/assets/game_objects/trim(Clone).material +++ b/godot/assets/game_objects/trim(Clone).material diff --git a/godot/assets/game_objects/window(Clone).material b/godot/assets/game_objects/window(Clone).material Binary files differindex b35e12b..62c30d7 100644 --- a/godot/assets/game_objects/window(Clone).material +++ b/godot/assets/game_objects/window(Clone).material diff --git a/godot/assets/game_objects/woodBarkDark(Clone).material b/godot/assets/game_objects/woodBarkDark(Clone).material Binary files differindex 82da2a6..531dc26 100644 --- a/godot/assets/game_objects/woodBarkDark(Clone).material +++ b/godot/assets/game_objects/woodBarkDark(Clone).material diff --git a/godot/assets/sounds/Uuhhh.mp3 b/godot/assets/sounds/Uuhhh.mp3 Binary files differdeleted file mode 100644 index ea917a2..0000000 --- a/godot/assets/sounds/Uuhhh.mp3 +++ /dev/null diff --git a/godot/assets/sounds/Uuhhh.mp3.import b/godot/assets/sounds/Uuhhh.mp3.import index 4044597..748d572 100644 --- a/godot/assets/sounds/Uuhhh.mp3.import +++ b/godot/assets/sounds/Uuhhh.mp3.import @@ -1,15 +1,3 @@ -[remap] - -importer="mp3" -type="AudioStreamMP3" -path="res://.import/Uuhhh.mp3-1452b4c6d720c509ff34f445446a352e.mp3str" - -[deps] - -source_file="res://assets/sounds/Uuhhh.mp3" -dest_files=[ "res://.import/Uuhhh.mp3-1452b4c6d720c509ff34f445446a352e.mp3str" ] - -[params] - -loop=true -loop_offset=0 +version https://git-lfs.github.com/spec/v1 +oid sha256:438df26bf3f392ff8f33d0cdc6ae6379b28a9ae306cccfe80e193127504c589a +size 286 diff --git a/godot/assets/sounds/bgm.mp3 b/godot/assets/sounds/bgm.mp3 new file mode 100644 index 0000000..cad9651 --- /dev/null +++ b/godot/assets/sounds/bgm.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b3907d7df22c82ee15cfff306a69dd3f5f003cec8a031972f84004dc268da51 +size 5963398 diff --git a/godot/assets/sounds/bgm.mp3.import b/godot/assets/sounds/bgm.mp3.import new file mode 100644 index 0000000..c98d401 --- /dev/null +++ b/godot/assets/sounds/bgm.mp3.import @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:128cf14fafb0d84338eca1ea75b9f54d21b86505f97f047a412607dc4e6fbbf3 +size 280 diff --git a/godot/assets/sounds/main_menu.mp3 b/godot/assets/sounds/main_menu.mp3 new file mode 100644 index 0000000..1f262dc --- /dev/null +++ b/godot/assets/sounds/main_menu.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b320e47c06cc8ba3889e3ac6467eff129fd9c6dced99de1de919783faea9ae23 +size 6169312 diff --git a/godot/assets/sounds/main_menu.mp3.import b/godot/assets/sounds/main_menu.mp3.import new file mode 100644 index 0000000..c593491 --- /dev/null +++ b/godot/assets/sounds/main_menu.mp3.import @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5090dd2ec3c9f87d013bd43165984f1643934d2f51bd8b2aa3e63e784335a2d +size 298 diff --git a/godot/assets/textures/grass-texture-26.jpg.import b/godot/assets/textures/grass-texture-26.jpg.import index 26272f5..cdf0c2f 100644 --- a/godot/assets/textures/grass-texture-26.jpg.import +++ b/godot/assets/textures/grass-texture-26.jpg.import @@ -1,37 +1,3 @@ -[remap] - -importer="texture" -type="StreamTexture" -path.s3tc="res://.import/grass-texture-26.jpg-f4d636ca8594cebf001f20c088d6db38.s3tc.stex" -path.etc2="res://.import/grass-texture-26.jpg-f4d636ca8594cebf001f20c088d6db38.etc2.stex" -metadata={ -"imported_formats": [ "s3tc", "etc2" ], -"vram_texture": true -} - -[deps] - -source_file="res://assets/textures/grass-texture-26.jpg" -dest_files=[ "res://.import/grass-texture-26.jpg-f4d636ca8594cebf001f20c088d6db38.s3tc.stex", "res://.import/grass-texture-26.jpg-f4d636ca8594cebf001f20c088d6db38.etc2.stex" ] - -[params] - -compress/mode=2 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=true -flags/filter=true -flags/mipmaps=true -flags/anisotropic=false -flags/srgb=1 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +version https://git-lfs.github.com/spec/v1 +oid sha256:a99bebeeb2e09fc6bee8c1dba5d8136aa3992439dfb6e207060f15f1adb40272 +size 954 diff --git a/godot/assets/textures/sandstone-brick-wall-texture.jpg.import b/godot/assets/textures/sandstone-brick-wall-texture.jpg.import index 0d3ef4c..51a1e75 100644 --- a/godot/assets/textures/sandstone-brick-wall-texture.jpg.import +++ b/godot/assets/textures/sandstone-brick-wall-texture.jpg.import @@ -1,37 +1,3 @@ -[remap] - -importer="texture" -type="StreamTexture" -path.s3tc="res://.import/sandstone-brick-wall-texture.jpg-c5b2a47ccb2119e07ae706d0127496d2.s3tc.stex" -path.etc2="res://.import/sandstone-brick-wall-texture.jpg-c5b2a47ccb2119e07ae706d0127496d2.etc2.stex" -metadata={ -"imported_formats": [ "s3tc", "etc2" ], -"vram_texture": true -} - -[deps] - -source_file="res://assets/textures/sandstone-brick-wall-texture.jpg" -dest_files=[ "res://.import/sandstone-brick-wall-texture.jpg-c5b2a47ccb2119e07ae706d0127496d2.s3tc.stex", "res://.import/sandstone-brick-wall-texture.jpg-c5b2a47ccb2119e07ae706d0127496d2.etc2.stex" ] - -[params] - -compress/mode=2 -compress/lossy_quality=0.7 -compress/hdr_mode=0 -compress/bptc_ldr=0 -compress/normal_map=0 -flags/repeat=true -flags/filter=true -flags/mipmaps=true -flags/anisotropic=false -flags/srgb=1 -process/fix_alpha_border=true -process/premult_alpha=false -process/HDR_as_SRGB=false -process/invert_color=false -process/normal_map_invert_y=false -stream=false -size_limit=0 -detect_3d=false -svg/scale=1.0 +version https://git-lfs.github.com/spec/v1 +oid sha256:6b9d95efee0199ac1cb70a4ee5c66604b42aa02344b34af775d731499a5508cc +size 1014 diff --git a/godot/assets/theme.tres b/godot/assets/theme.tres new file mode 100644 index 0000000..1269b54 --- /dev/null +++ b/godot/assets/theme.tres @@ -0,0 +1,47 @@ +[gd_resource type="Theme" load_steps=10 format=2] + +[ext_resource path="res://assets/fonts/format.otf" type="DynamicFontData" id=1] +[ext_resource path="res://assets/fonts/format.tres" type="DynamicFont" id=2] + +[sub_resource type="DynamicFont" id=1] +size = 55 +extra_spacing_bottom = -15 +font_data = ExtResource( 1 ) + +[sub_resource type="StyleBoxFlat" id=2] +content_margin_top = 10.0 +content_margin_bottom = 10.0 +bg_color = Color( 0.4, 0.337255, 0.313726, 0.32549 ) + +[sub_resource type="StyleBoxFlat" id=3] +content_margin_top = 10.0 +content_margin_bottom = 10.0 +bg_color = Color( 0.176471, 0.14902, 0.141176, 1 ) + +[sub_resource type="StyleBoxFlat" id=4] +content_margin_top = 10.0 +content_margin_bottom = 10.0 +bg_color = Color( 0.4, 0.337255, 0.313726, 1 ) + +[sub_resource type="StyleBoxFlat" id=5] +content_margin_top = 20.0 +content_margin_bottom = 20.0 +bg_color = Color( 0.290196, 0.247059, 0.231373, 1 ) + +[sub_resource type="StyleBoxFlat" id=6] +content_margin_top = 10.0 +content_margin_bottom = 10.0 +bg_color = Color( 0.176471, 0.14902, 0.141176, 1 ) + +[sub_resource type="StyleBoxFlat" id=7] +bg_color = Color( 0.160784, 0.133333, 0.133333, 1 ) + +[resource] +Button/fonts/font = SubResource( 1 ) +Button/styles/disabled = SubResource( 2 ) +Button/styles/focus = SubResource( 3 ) +Button/styles/hover = SubResource( 4 ) +Button/styles/normal = SubResource( 5 ) +Button/styles/pressed = SubResource( 6 ) +Label/fonts/font = ExtResource( 2 ) +Panel/styles/panel = SubResource( 7 ) diff --git a/godot/native/BasicDie.gdns b/godot/native/BasicDie.gdns new file mode 100644 index 0000000..ab5d534 --- /dev/null +++ b/godot/native/BasicDie.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://native/game.gdnlib" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "BasicDie" +class_name = "BasicDie" +library = ExtResource( 1 ) diff --git a/godot/native/GoalTriggerBox.gdns b/godot/native/GoalTriggerBox.gdns new file mode 100644 index 0000000..249df19 --- /dev/null +++ b/godot/native/GoalTriggerBox.gdns @@ -0,0 +1,8 @@ +[gd_resource type="NativeScript" load_steps=2 format=2] + +[ext_resource path="res://native/game.gdnlib" type="GDNativeLibrary" id=1] + +[resource] +resource_name = "GoalTriggerZone" +class_name = "GoalTriggerZone" +library = ExtResource( 1 ) diff --git a/godot/native/game.gdnlib b/godot/native/game.gdnlib index 439db91..b7c3ec4 100644 --- a/godot/native/game.gdnlib +++ b/godot/native/game.gdnlib @@ -11,14 +11,14 @@ Android.arm64-v8a="res://../lib/aarch64-linux-android/libcode_with_your_friends2 Android.armeabi-v7a="res://../lib/armv7-linux-androideabi/libcode_with_your_friends2022.so" Android.x86="res://../lib/i686-linux-android/libcode_with_your_friends2022.so" Android.x86_64="res://../lib/x86_64-linux-android/libcode_with_your_friends2022.so" -HTML5.wasm32 = "res://../lib/wasm32-unknown-emscripten/code_with_your_friends2022.wasm" +HTML5.wasm32="res://../lib/wasm32-unknown-emscripten/code_with_your_friends2022.wasm" iOS.arm64="res://../lib/aarch64-apple-ios/libcode_with_your_friends2022.a" OSX.64="res://../lib/x86_64-apple-darwin/libcode_with_your_friends2022.dylib" Server.32="res://../lib/i686-unknown-linux-gnu/libcode_with_your_friends2022.so" Server.64="res://../lib/x86_64-unknown-linux-gnu/libcode_with_your_friends2022.so" -# Windows.32="res://../lib/i686-pc-windows-gnu/code_with_your_friends2022.dll" +#Windows.32="res://../lib/i686-pc-windows-gnu/code_with_your_friends2022.dll" Windows.32="res://../lib/i686-pc-windows-msvc/code_with_your_friends2022.dll" -# Windows.64="res://../lib/x86_64-pc-windows-gnu/code_with_your_friends2022.dll" +#Windows.64="res://../lib/x86_64-pc-windows-gnu/code_with_your_friends2022.dll" Windows.64="res://../lib/x86_64-pc-windows-msvc/code_with_your_friends2022.dll" X11.32="res://../lib/i686-unknown-linux-gnu/libcode_with_your_friends2022.so" X11.64="res://../lib/x86_64-unknown-linux-gnu/libcode_with_your_friends2022.so" diff --git a/godot/project.godot b/godot/project.godot index a8f6586..e98a5a8 100644 --- a/godot/project.godot +++ b/godot/project.godot @@ -8,16 +8,38 @@ config_version=4 +_global_script_classes=[ ] +_global_script_class_icons={ +} + [application] config/name="code-with-your-friends2022" -run/main_scene="res://scenes/Game.tscn" +run/main_scene="res://scenes/Menu.tscn" config/icon="res://assets/godot-ferris-32x32.png" +[display] + +window/size/width=1920 +window/size/height=1080 +window/stretch/mode="2d" + [gdnative] singletons=[ ] +[input] + +mouse_btn_left={ +"deadzone": 0.5, +"events": [ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) + ] +} +esc={ +"deadzone": 0.5, +"events": [ ] +} + [rendering] environment/default_environment="res://default_env.tres" diff --git a/godot/scenes/Die.gd b/godot/scenes/Die.gd new file mode 100644 index 0000000..21a408e --- /dev/null +++ b/godot/scenes/Die.gd @@ -0,0 +1,130 @@ +extends RigidBody + +const Game = preload("res://scenes/Game.gd") + +var camrot_h = 0 +var camrot_v = 0 +var camrot_v_locked_val = 0 +var cam_v_min = -90 +var cam_v_max = 90 +var sensitivity = 0.5 +var dice_is_moving = false +var last_frame_position = Vector3(1.0,1.0,1.0) +var mouse_origin = Vector2(0,0) +var die_launch_force_magnitude = 0 +var die_launch_force_direction = Vector3(0,0,0) +var die_launch_force = Vector3(0,0,0) +var die_launch_force_multiplier = 0.05 +var left_pressed = false + +var mat +var target_bounce = 1 +var previous_bounciness = 0 + +var _game: Game = null + +# Called when the node enters the scene tree for the first time. +func _ready(): + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + $CamRoot/Horizontal/Vertical/Camera.add_exception(self) + $CamRoot.set_as_toplevel(true) + _game = get_node("/root/Game") + mat = get_physics_material_override() + previous_bounciness = mat.get_bounce() + +func _input(event): + + if event is InputEventKey: + if event.scancode == KEY_TAB: + if event.is_pressed(): + _game.open_scoreboard() + else: + _game.close_scoreboard() + return + + if event is InputEventMouseButton and dice_is_moving == false: + if event.is_pressed() and left_pressed == false: + Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) + mouse_origin = event.global_position + camrot_v_locked_val = camrot_v + left_pressed = true + else: + left_pressed = false + die_launch_force_magnitude = -(mouse_origin.y - event.global_position.y) + die_launch_force_direction = $CamRoot/Horizontal/Vertical/Camera.get_global_transform().basis + die_launch_force_direction = -die_launch_force_direction.z + die_launch_force = die_launch_force_direction * die_launch_force_magnitude * die_launch_force_multiplier + self.apply_central_impulse(die_launch_force) + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + + if event is InputEventMouseMotion: + camrot_h += -event.relative.x * sensitivity + if left_pressed: + camrot_v = camrot_v_locked_val + else: + camrot_v += -event.relative.y * sensitivity + + +func _physics_process(delta): + camrot_v = clamp(camrot_v, cam_v_min, cam_v_max) + + $CamRoot/Horizontal.rotation_degrees.y = camrot_h + $CamRoot/Horizontal/Vertical.rotation_degrees.x = camrot_v + $CamRoot.translation.x = translation.x + $CamRoot.translation.y = translation.y + $CamRoot.translation.z = translation.z + + if last_frame_position != Vector3(translation.x, translation.y, translation.x): + dice_is_moving = true + else: + dice_is_moving = false + + if angular_velocity.length() == 0: + get_upwards_side() + + last_frame_position = Vector3(translation.x, translation.y, translation.x) + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass + + +""" +BUFFS +""" + +func get_upwards_side(): + return 0 + + +func extra_stroke(): + _game.revoke_stroke() + + +func bounciness(): + mat.set_bounce(target_bounce) + + +func bounciness_revert(): + mat.set_bounce(previous_bounciness) + + +func phase(): + set_collision_layer_bit(2, false) + + +func phase_revert(): + set_collision_layer_bit(2, true) + + +func ball(): + $BallShape.show() + $BallShape.set_process(true) + $BallShape.disabled = false + + +func ball_revert(): + $BallShape.hide() + $BallShape.set_process(false) + $BallShape.disabled = true diff --git a/godot/scenes/Die.tscn b/godot/scenes/Die.tscn new file mode 100644 index 0000000..2d73734 --- /dev/null +++ b/godot/scenes/Die.tscn @@ -0,0 +1,60 @@ +[gd_scene load_steps=8 format=2] + +[ext_resource path="res://scenes/Die.gd" type="Script" id=1] +[ext_resource path="res://assets/game_objects/W8baseColor_Mat.material" type="Material" id=2] + +[sub_resource type="PhysicsMaterial" id=3] + +[sub_resource type="ConvexPolygonShape" id=2] +points = PoolVector3Array( -0.0850063, -0.879389, -0.0282584, 0.0288993, 0.929375, 0.0289349, 0.0288993, 0.929375, -0.0289349, 0.929367, -0.0289314, 0.0289314, -0.0289784, -0.0289338, 0.929338, -0.929369, 0.028929, 0.028929, 0.0288993, -0.0289349, -0.929375, 0.0288993, -0.929375, 0.0289349, -0.0850063, 0.0282584, -0.879389, 0.0282247, 0.084959, 0.87945, 0.857489, 0.056933, -0.0855785, -0.879454, -0.0849424, 0.0282549, 0.0570775, -0.885814, -0.0571088, 0.0570775, -0.0571088, 0.885814, -0.0571532, 0.885743, -0.0571043, -0.0571532, 0.885743, 0.0571043, 0.0570775, 0.0571088, -0.885814, -0.885806, -0.057097, -0.057097, 0.879446, 0.0849494, 0.0282572, 0.857335, -0.0571018, -0.0855632, -0.0571532, 0.0571043, 0.885743, -0.0571532, -0.885743, 0.0571043, -0.885806, 0.057097, -0.057097, -0.0571532, -0.0571043, -0.885743, 0.0570775, 0.0571088, 0.885814, -0.0571532, -0.885743, -0.0571043, -0.0571532, 0.0571043, -0.885743, 0.0570775, -0.885814, 0.0571088, 0.0570775, 0.885814, 0.0571088, -0.0571532, -0.0571043, 0.885743, -0.885806, 0.057097, 0.057097, 0.0570775, 0.885814, -0.0571088, 0.0570775, -0.0571088, -0.885814, 0.857335, -0.0571018, 0.0855632, -0.885806, -0.057097, 0.057097, 0.857489, 0.056933, 0.0855785, 0.929425, 0.0287513, -0.0289333, 0.929367, -0.0289314, -0.0289314, -0.0289784, 0.929338, -0.0289338, 0.0288993, 0.0289349, -0.929375, -0.929369, -0.028929, -0.028929, -0.0283039, -0.87942, -0.0849561, 0.084933, 0.0282608, 0.879461, -0.0289784, 0.929338, 0.0289338, -0.0289784, -0.0289338, -0.929338, -0.0289784, 0.0289338, 0.929338, 0.0288993, -0.0289349, 0.929375, 0.0288993, -0.929375, -0.0289349, -0.0289784, -0.929338, 0.0289338, -0.929369, 0.028929, -0.028929, -0.0283039, 0.0849561, -0.87942, -0.879454, -0.0282549, 0.0849424, 0.879512, 0.0280816, 0.0849558, 0.879446, -0.0849494, -0.0282572, -0.0282988, -0.822574, 0.141805, 0.17021, 0.0280745, -0.794261, -0.879454, 0.0849424, -0.0282549, -0.0283039, 0.87942, 0.0849561, 0.0282247, 0.87945, -0.084959, 0.0282247, -0.084959, -0.87945, -0.879454, -0.0282549, -0.0849424, -0.0850063, 0.0282584, 0.879389, -0.0850063, 0.879389, 0.0282584, 0.084933, -0.0282608, 0.879461 ) + +[sub_resource type="ArrayMesh" id=1] +resource_name = "W8_Cone" +surfaces/0 = { +"aabb": AABB( -0.956074, -0.956074, -0.956074, 1.91215, 1.91215, 1.91215 ), +"array_data": PoolByteArray( 243, 55, 39, 61, 242, 55, 39, 189, 1, 25, 107, 191, 90, 166, 181, 114, 182, 56, 213, 56, 243, 55, 39, 189, 242, 55, 39, 189, 1, 25, 107, 191, 166, 166, 202, 117, 195, 56, 249, 56, 243, 55, 39, 189, 242, 55, 39, 61, 1, 25, 107, 191, 166, 90, 68, 9, 203, 59, 28, 52, 243, 55, 39, 61, 242, 55, 39, 61, 1, 25, 107, 191, 90, 90, 179, 93, 211, 56, 187, 56, 0, 0, 0, 0, 194, 217, 73, 189, 30, 67, 109, 191, 74, 129, 189, 114, 188, 56, 231, 56, 0, 0, 0, 0, 0, 0, 0, 0, 64, 193, 116, 191, 127, 127, 208, 102, 215, 56, 221, 56, 0, 0, 0, 0, 0, 0, 0, 0, 64, 193, 116, 191, 127, 127, 35, 17, 234, 59, 51, 52, 196, 217, 73, 189, 0, 0, 0, 0, 30, 67, 109, 191, 129, 74, 9, 124, 216, 56, 251, 56, 196, 217, 73, 189, 0, 0, 0, 0, 30, 67, 109, 191, 129, 74, 64, 18, 219, 59, 3, 52, 0, 0, 0, 0, 194, 217, 73, 61, 30, 67, 109, 191, 74, 127, 179, 77, 229, 56, 195, 56, 0, 0, 0, 0, 194, 217, 73, 61, 30, 67, 109, 191, 74, 127, 62, 8, 207, 59, 68, 52, 196, 217, 73, 61, 0, 0, 0, 0, 30, 67, 109, 191, 127, 74, 185, 106, 196, 56, 200, 56, 1, 25, 107, 63, 242, 55, 39, 189, 232, 55, 39, 189, 90, 184, 179, 121, 112, 54, 156, 54, 1, 25, 107, 63, 243, 55, 39, 61, 232, 55, 39, 189, 90, 72, 181, 101, 169, 54, 105, 54, 1, 25, 107, 63, 244, 55, 39, 61, 253, 55, 39, 61, 54, 36, 202, 109, 143, 54, 33, 54, 1, 25, 107, 63, 242, 55, 39, 189, 253, 55, 39, 61, 54, 220, 206, 34, 252, 39, 251, 57, 31, 67, 109, 63, 252, 254, 180, 177, 177, 217, 73, 189, 126, 204, 185, 112, 141, 54, 131, 54, 64, 193, 116, 63, 2, 43, 165, 48, 23, 193, 39, 51, 126, 0, 0, 17, 30, 36, 240, 57, 64, 193, 116, 63, 2, 43, 165, 48, 23, 193, 39, 51, 126, 0, 48, 126, 104, 54, 89, 54, 30, 67, 109, 63, 196, 217, 73, 61, 245, 193, 47, 51, 74, 52, 189, 105, 157, 54, 69, 54, 30, 67, 109, 63, 0, 0, 0, 49, 206, 217, 73, 61, 74, 0, 230, 32, 252, 37, 8, 58, 30, 67, 109, 63, 0, 0, 0, 49, 206, 217, 73, 61, 74, 0, 253, 122, 102, 54, 29, 54, 30, 67, 109, 63, 195, 217, 73, 189, 245, 193, 47, 51, 74, 204, 211, 31, 126, 39, 231, 57, 30, 67, 109, 63, 195, 217, 73, 189, 245, 193, 47, 51, 74, 204, 98, 116, 75, 54, 141, 54, 221, 55, 39, 61, 242, 55, 39, 189, 1, 25, 107, 63, 36, 220, 190, 39, 246, 50, 180, 59, 221, 55, 39, 61, 242, 55, 39, 61, 1, 25, 107, 63, 36, 36, 196, 102, 169, 55, 244, 46, 8, 56, 39, 189, 240, 55, 39, 61, 1, 25, 107, 63, 220, 36, 154, 101, 224, 55, 32, 46, 7, 56, 39, 189, 242, 55, 39, 189, 1, 25, 107, 63, 220, 220, 133, 89, 136, 51, 193, 59, 179, 217, 73, 61, 252, 254, 180, 177, 30, 67, 109, 63, 52, 0, 211, 39, 190, 50, 195, 59, 179, 217, 73, 61, 252, 254, 180, 177, 30, 67, 109, 63, 52, 0, 228, 102, 131, 55, 187, 46, 81, 109, 158, 179, 172, 28, 154, 176, 64, 193, 116, 63, 0, 0, 161, 47, 27, 51, 212, 59, 81, 109, 158, 179, 172, 28, 154, 176, 64, 193, 116, 63, 0, 0, 190, 93, 159, 55, 238, 45, 245, 193, 175, 179, 194, 217, 73, 61, 30, 67, 109, 63, 0, 52, 172, 100, 197, 55, 141, 46, 218, 217, 73, 189, 0, 0, 128, 177, 30, 67, 109, 63, 204, 0, 137, 91, 144, 51, 213, 59, 218, 217, 73, 189, 0, 0, 128, 177, 30, 67, 109, 63, 204, 0, 155, 97, 211, 55, 133, 45, 245, 193, 171, 179, 195, 217, 73, 189, 30, 67, 109, 63, 0, 204, 155, 41, 64, 51, 186, 59, 1, 25, 107, 191, 242, 55, 39, 189, 240, 55, 39, 61, 202, 220, 154, 101, 27, 56, 70, 59, 1, 25, 107, 191, 242, 55, 39, 61, 240, 55, 39, 61, 202, 36, 133, 103, 41, 58, 135, 40, 1, 25, 107, 191, 242, 55, 39, 61, 246, 55, 39, 189, 166, 72, 79, 6, 77, 58, 90, 41, 1, 25, 107, 191, 242, 55, 39, 189, 246, 55, 39, 189, 166, 184, 196, 121, 54, 56, 43, 59, 31, 67, 109, 191, 0, 0, 0, 0, 192, 217, 73, 61, 182, 0, 155, 105, 33, 56, 89, 59, 31, 67, 109, 191, 0, 0, 0, 0, 192, 217, 73, 61, 182, 0, 137, 102, 39, 58, 137, 38, 64, 193, 116, 191, 0, 0, 0, 0, 46, 230, 13, 178, 129, 0, 190, 127, 59, 56, 76, 59, 64, 193, 116, 191, 0, 0, 0, 0, 46, 230, 13, 178, 129, 0, 161, 1, 68, 58, 172, 38, 30, 67, 109, 191, 205, 217, 73, 61, 124, 173, 63, 178, 182, 52, 155, 8, 59, 58, 248, 40, 30, 67, 109, 191, 0, 0, 0, 0, 199, 217, 73, 189, 129, 52, 48, 117, 73, 56, 50, 59, 30, 67, 109, 191, 0, 0, 0, 0, 199, 217, 73, 189, 129, 52, 78, 16, 92, 58, 107, 40, 30, 67, 109, 191, 205, 217, 73, 189, 124, 173, 63, 178, 182, 204, 172, 111, 40, 56, 56, 59, 243, 55, 39, 189, 1, 25, 107, 63, 242, 55, 39, 189, 184, 90, 180, 1, 140, 57, 188, 52, 242, 55, 39, 189, 1, 25, 107, 63, 243, 55, 39, 61, 220, 54, 140, 101, 105, 57, 157, 52, 242, 55, 39, 61, 1, 25, 107, 63, 244, 55, 39, 61, 36, 54, 180, 101, 78, 57, 209, 52, 242, 55, 39, 61, 1, 25, 107, 63, 242, 55, 39, 189, 72, 90, 165, 90, 91, 57, 24, 53, 195, 217, 73, 189, 30, 67, 109, 63, 153, 186, 72, 48, 204, 74, 149, 14, 122, 57, 172, 52, 0, 0, 0, 46, 64, 193, 116, 63, 129, 149, 40, 49, 0, 126, 130, 32, 110, 57, 223, 52, 205, 12, 189, 177, 30, 67, 109, 63, 196, 217, 73, 61, 0, 74, 159, 99, 91, 57, 183, 52, 194, 217, 73, 61, 30, 67, 109, 63, 233, 6, 164, 49, 52, 74, 171, 97, 84, 57, 244, 52, 0, 0, 0, 0, 30, 67, 109, 63, 195, 217, 73, 189, 204, 126, 138, 65, 112, 57, 28, 53, 0, 0, 0, 0, 30, 67, 109, 63, 195, 217, 73, 189, 204, 126, 74, 1, 140, 57, 229, 52, 242, 55, 39, 189, 1, 25, 107, 191, 243, 55, 39, 189, 184, 166, 180, 114, 123, 53, 161, 57, 243, 55, 39, 61, 1, 25, 107, 191, 242, 55, 39, 189, 72, 166, 165, 117, 96, 53, 125, 57, 242, 55, 39, 61, 1, 25, 107, 191, 243, 55, 39, 61, 36, 202, 180, 37, 254, 52, 171, 57, 243, 55, 39, 189, 1, 25, 107, 191, 242, 55, 39, 61, 220, 202, 140, 93, 68, 53, 187, 57, 0, 0, 0, 0, 30, 67, 109, 191, 195, 217, 73, 189, 204, 129, 171, 113, 110, 53, 143, 57, 0, 0, 192, 174, 64, 193, 116, 191, 172, 28, 102, 48, 0, 129, 129, 95, 57, 53, 154, 57, 195, 217, 73, 61, 30, 67, 109, 191, 234, 6, 164, 49, 52, 182, 183, 37, 253, 52, 151, 57, 195, 217, 73, 61, 30, 67, 109, 191, 234, 6, 164, 49, 52, 182, 123, 124, 54, 53, 123, 57, 164, 27, 16, 177, 30, 67, 109, 191, 195, 217, 73, 61, 0, 182, 149, 39, 33, 53, 179, 57, 195, 217, 73, 189, 30, 67, 109, 191, 149, 186, 72, 48, 204, 182, 159, 105, 96, 53, 174, 57 ), +"array_index_data": PoolByteArray( 38, 0, 2, 0, 48, 0, 15, 0, 60, 0, 24, 0, 27, 0, 61, 0, 36, 0, 39, 0, 58, 0, 1, 0, 3, 0, 13, 0, 51, 0, 26, 0, 37, 0, 49, 0, 14, 0, 25, 0, 50, 0, 0, 0, 5, 0, 4, 0, 0, 0, 11, 0, 5, 0, 1, 0, 5, 0, 7, 0, 1, 0, 4, 0, 5, 0, 2, 0, 6, 0, 10, 0, 2, 0, 8, 0, 6, 0, 3, 0, 5, 0, 11, 0, 3, 0, 9, 0, 5, 0, 12, 0, 18, 0, 16, 0, 12, 0, 23, 0, 18, 0, 13, 0, 18, 0, 19, 0, 13, 0, 16, 0, 18, 0, 14, 0, 18, 0, 21, 0, 14, 0, 19, 0, 18, 0, 15, 0, 17, 0, 22, 0, 15, 0, 20, 0, 17, 0, 24, 0, 30, 0, 28, 0, 24, 0, 35, 0, 30, 0, 25, 0, 31, 0, 32, 0, 25, 0, 29, 0, 31, 0, 26, 0, 31, 0, 34, 0, 26, 0, 32, 0, 31, 0, 27, 0, 30, 0, 35, 0, 27, 0, 33, 0, 30, 0, 36, 0, 42, 0, 40, 0, 36, 0, 47, 0, 42, 0, 37, 0, 43, 0, 44, 0, 37, 0, 41, 0, 43, 0, 38, 0, 43, 0, 46, 0, 38, 0, 44, 0, 43, 0, 39, 0, 42, 0, 47, 0, 39, 0, 45, 0, 42, 0, 48, 0, 53, 0, 52, 0, 48, 0, 57, 0, 53, 0, 49, 0, 53, 0, 54, 0, 49, 0, 52, 0, 53, 0, 50, 0, 53, 0, 55, 0, 50, 0, 54, 0, 53, 0, 51, 0, 53, 0, 56, 0, 51, 0, 55, 0, 53, 0, 58, 0, 63, 0, 62, 0, 58, 0, 67, 0, 63, 0, 59, 0, 63, 0, 65, 0, 59, 0, 62, 0, 63, 0, 60, 0, 63, 0, 66, 0, 60, 0, 64, 0, 63, 0, 61, 0, 63, 0, 67, 0, 61, 0, 66, 0, 63, 0, 3, 0, 16, 0, 13, 0, 3, 0, 11, 0, 16, 0, 11, 0, 12, 0, 16, 0, 11, 0, 0, 0, 12, 0, 2, 0, 57, 0, 48, 0, 2, 0, 10, 0, 57, 0, 9, 0, 51, 0, 56, 0, 9, 0, 3, 0, 51, 0, 50, 0, 19, 0, 14, 0, 50, 0, 55, 0, 19, 0, 55, 0, 13, 0, 19, 0, 55, 0, 51, 0, 13, 0, 14, 0, 29, 0, 25, 0, 14, 0, 21, 0, 29, 0, 20, 0, 24, 0, 28, 0, 20, 0, 15, 0, 24, 0, 49, 0, 32, 0, 26, 0, 49, 0, 54, 0, 32, 0, 54, 0, 25, 0, 32, 0, 54, 0, 50, 0, 25, 0, 26, 0, 41, 0, 37, 0, 26, 0, 34, 0, 41, 0, 33, 0, 36, 0, 40, 0, 33, 0, 27, 0, 36, 0, 48, 0, 44, 0, 38, 0, 48, 0, 52, 0, 44, 0, 52, 0, 37, 0, 44, 0, 52, 0, 49, 0, 37, 0, 38, 0, 8, 0, 2, 0, 38, 0, 46, 0, 8, 0, 45, 0, 1, 0, 7, 0, 45, 0, 39, 0, 1, 0, 0, 0, 62, 0, 59, 0, 0, 0, 4, 0, 62, 0, 4, 0, 58, 0, 62, 0, 4, 0, 1, 0, 58, 0, 59, 0, 23, 0, 12, 0, 59, 0, 65, 0, 23, 0, 64, 0, 15, 0, 22, 0, 64, 0, 60, 0, 15, 0, 60, 0, 35, 0, 24, 0, 60, 0, 66, 0, 35, 0, 66, 0, 27, 0, 35, 0, 66, 0, 61, 0, 27, 0, 61, 0, 47, 0, 36, 0, 61, 0, 67, 0, 47, 0, 67, 0, 39, 0, 47, 0, 67, 0, 58, 0, 39, 0, 0, 0, 59, 0, 12, 0 ), +"blend_shape_data": [ ], +"format": 2194711, +"index_count": 312, +"material": ExtResource( 2 ), +"primitive": 4, +"skeleton_aabb": [ ], +"vertex_count": 68 +} + +[sub_resource type="SphereShape" id=4] + +[sub_resource type="SphereMesh" id=5] + +[node name="Die" type="RigidBody"] +collision_mask = 3 +physics_material_override = SubResource( 3 ) +script = ExtResource( 1 ) + +[node name="CollisionShape" type="CollisionShape" parent="."] +shape = SubResource( 2 ) + +[node name="Cone" type="MeshInstance" parent="CollisionShape"] +mesh = SubResource( 1 ) +skeleton = NodePath("../../..") +material/0 = null + +[node name="BallShape" type="CollisionShape" parent="."] +visible = false +shape = SubResource( 4 ) +disabled = true + +[node name="Ball" type="MeshInstance" parent="BallShape"] +mesh = SubResource( 5 ) +skeleton = NodePath("../..") +material/0 = null + +[node name="CamRoot" type="Spatial" parent="."] + +[node name="Horizontal" type="Spatial" parent="CamRoot"] + +[node name="Vertical" type="Spatial" parent="CamRoot/Horizontal"] + +[node name="Camera" type="ClippedCamera" parent="CamRoot/Horizontal/Vertical"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10.1285 ) diff --git a/godot/scenes/Game.gd b/godot/scenes/Game.gd new file mode 100644 index 0000000..f24219e --- /dev/null +++ b/godot/scenes/Game.gd @@ -0,0 +1,87 @@ +extends Spatial + +const NUM_LEVELS = 9 +const PAR = [1,2,3,4,5,6,7,8,9] + +# level control +var current_level_id = 0 +var levels = [] +var post_game = false + +# stroke control +var current_strokes = 0 +var strokes_per_level = [0,0,0,0,0,0,0,0,0] + +# Called when the node enters the scene tree for the first time. +func _ready(): + for i in range(NUM_LEVELS): + levels.append(get_node("/root/Game/Level%d" % (i+1))) + + current_strokes = 0 + levels[0].show() + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + if Input.is_action_just_pressed("ui_cancel"): + get_tree().paused = true + $PausePopup.show() + Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) + + + +func _on_QuitButton_pressed(): + get_tree().quit() + + +func _on_ResumeButton_pressed(): + $PausePopup.hide() + get_tree().paused = false + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + + +func end_level(): + # save current strokes and reset + strokes_per_level[current_level_id] = current_strokes + current_strokes = 0 + + post_game = true + + open_scoreboard() + + +func add_stroke(): + current_strokes += 1 + + +func revoke_stroke(): + current_strokes -= 1 + + +func open_scoreboard(): + $Scoreboard.update_values(strokes_per_level, PAR) + $Scoreboard.show() + + +func close_scoreboard(): + $Scoreboard.hide() + + +func is_post_game(): + return post_game + + +func next_level(): + post_game = false + + levels[current_level_id].hide() + current_level_id = current_level_id + 1 + + if current_level_id >= NUM_LEVELS: + # TODO load main menu + return + + # load next level + levels[current_level_id].show() + + close_scoreboard() diff --git a/godot/scenes/Game.tscn b/godot/scenes/Game.tscn index f8b17cb..9891f4e 100644 --- a/godot/scenes/Game.tscn +++ b/godot/scenes/Game.tscn @@ -1,14 +1,74 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=7 format=2] -[ext_resource path="res://native/Game.gdns" type="Script" id=1] -[ext_resource path="res://scenes/levels/test_scene_uuuhhh/TestSceneUuuhhh.tscn" type="PackedScene" id=2] +[ext_resource path="res://scenes/Game.gd" type="Script" id=1] +[ext_resource path="res://scenes/levels/test_scene_movement/TestSceneMovement.tscn" type="PackedScene" id=2] +[ext_resource path="res://assets/theme.tres" type="Theme" id=3] +[ext_resource path="res://assets/fonts/format.tres" type="DynamicFont" id=4] +[ext_resource path="res://scenes/objects/Scoreboard.tscn" type="PackedScene" id=5] +[ext_resource path="res://assets/sounds/bgm.mp3" type="AudioStream" id=6] [node name="Game" type="Spatial"] script = ExtResource( 1 ) -[node name="Camera" type="Camera" parent="."] -transform = Transform( -0.538224, 0.336461, -0.772728, 0, 0.916856, 0.399217, 0.842802, 0.214868, -0.493474, -6.58972, 3.31005, -7.31211 ) -current = true -fov = 64.6875 +[node name="TestScene" parent="." instance=ExtResource( 2 )] -[node name="TestSceneUuuhhh" parent="." instance=ExtResource( 2 )] +[node name="PausePopup" type="Control" parent="."] +pause_mode = 2 +visible = false +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_right = 40.0 +margin_bottom = 40.0 + +[node name="Panel" type="Panel" parent="PausePopup"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 300.0 +margin_top = 200.0 +margin_right = -300.0 +margin_bottom = -200.0 +theme = ExtResource( 3 ) + +[node name="Label" type="Label" parent="PausePopup/Panel"] +anchor_right = 1.0 +anchor_bottom = 0.3 +theme = ExtResource( 3 ) +custom_fonts/font = ExtResource( 4 ) +text = "Game is Paused" +align = 1 +valign = 1 + +[node name="VBoxContainer" type="VBoxContainer" parent="PausePopup/Panel"] +anchor_top = 0.3 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 500.0 +margin_right = -500.0 +custom_constants/separation = 20 +alignment = 1 + +[node name="ResumeButton" type="Button" parent="PausePopup/Panel/VBoxContainer"] +margin_top = 161.0 +margin_right = 360.0 +margin_bottom = 242.0 +text = "Resume" + +[node name="QuitButton" type="Button" parent="PausePopup/Panel/VBoxContainer"] +margin_top = 262.0 +margin_right = 360.0 +margin_bottom = 343.0 +text = "Quit" + +[node name="Scoreboard" parent="." instance=ExtResource( 5 )] +visible = false +margin_right = -0.319946 +margin_bottom = 0.47998 + +[node name="Level1" type="Spatial" parent="."] + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 6 ) +autoplay = true + +[connection signal="pressed" from="PausePopup/Panel/VBoxContainer/ResumeButton" to="." method="_on_ResumeButton_pressed"] +[connection signal="pressed" from="PausePopup/Panel/VBoxContainer/QuitButton" to="." method="_on_QuitButton_pressed"] diff --git a/godot/scenes/Menu.gd b/godot/scenes/Menu.gd new file mode 100644 index 0000000..2634e37 --- /dev/null +++ b/godot/scenes/Menu.gd @@ -0,0 +1,25 @@ +extends Control + + +# Declare member variables here. Examples: +# var a = 2 +# var b = "text" + + +# Called when the node enters the scene tree for the first time. +func _ready(): + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + pass + + +func _on_StartButton_pressed(): + get_tree().change_scene("res://scenes/Game.tscn") + + + +func _on_QuitButton_pressed(): + get_tree().quit() diff --git a/godot/scenes/Menu.tscn b/godot/scenes/Menu.tscn new file mode 100644 index 0000000..792bc28 --- /dev/null +++ b/godot/scenes/Menu.tscn @@ -0,0 +1,47 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://assets/theme.tres" type="Theme" id=1] +[ext_resource path="res://scenes/Menu.gd" type="Script" id=2] +[ext_resource path="res://assets/sounds/main_menu.mp3" type="AudioStream" id=3] + +[node name="Menu" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +script = ExtResource( 2 ) + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +anchor_right = 0.25 +anchor_bottom = 1.0 +margin_left = 40.0 +margin_top = 789.0 +margin_bottom = -40.0 +theme = ExtResource( 1 ) +alignment = 2 + +[node name="StartButton" type="Button" parent="VBoxContainer"] +margin_top = 85.0 +margin_right = 440.0 +margin_bottom = 166.0 +focus_neighbour_top = NodePath("../QuitButton") +text = "Start" + +[node name="LevelButton" type="Button" parent="VBoxContainer"] +visible = false +margin_top = 85.0 +margin_right = 440.0 +margin_bottom = 166.0 +text = "Levels" + +[node name="QuitButton" type="Button" parent="VBoxContainer"] +margin_top = 170.0 +margin_right = 440.0 +margin_bottom = 251.0 +focus_neighbour_bottom = NodePath("../StartButton") +text = "Quit" + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +stream = ExtResource( 3 ) +autoplay = true + +[connection signal="pressed" from="VBoxContainer/StartButton" to="." method="_on_StartButton_pressed"] +[connection signal="pressed" from="VBoxContainer/QuitButton" to="." method="_on_QuitButton_pressed"] diff --git a/godot/scenes/levels/GoalTriggerZone.tscn b/godot/scenes/levels/GoalTriggerZone.tscn new file mode 100644 index 0000000..861db4d --- /dev/null +++ b/godot/scenes/levels/GoalTriggerZone.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://scripts/GoalTriggerBox.gd" type="Script" id=1] + +[sub_resource type="BoxShape" id=1] + +[node name="GoalTriggerZone" type="Area"] +transform = Transform( 10, 0, 0, 0, 10, 0, 0, 0, 10, 20, 0, 0 ) +script = ExtResource( 1 ) + +[node name="CollisionShape" type="CollisionShape" parent="."] +shape = SubResource( 1 ) + +[connection signal="body_entered" from="." to="." method="_on_Area2_body_entered"] diff --git a/godot/scenes/levels/test_scene/TestScene.tscn b/godot/scenes/levels/test_scene/TestScene.tscn deleted file mode 100644 index ed981f8..0000000 --- a/godot/scenes/levels/test_scene/TestScene.tscn +++ /dev/null @@ -1,11 +0,0 @@ -[gd_scene load_steps=3 format=2] - -[ext_resource path="res://scenes/levels/test_scene/Floor.tscn" type="PackedScene" id=1] -[ext_resource path="res://scenes/W8.tscn" type="PackedScene" id=2] - -[node name="TestScene" type="Spatial"] - -[node name="Floor" parent="." instance=ExtResource( 1 )] - -[node name="RigidBody" parent="." instance=ExtResource( 2 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0339947, 2.91518, -1.40456 ) diff --git a/godot/scenes/levels/test_scene_movement/Floor.tscn b/godot/scenes/levels/test_scene_movement/Floor.tscn new file mode 100644 index 0000000..f8970a7 --- /dev/null +++ b/godot/scenes/levels/test_scene_movement/Floor.tscn @@ -0,0 +1,22 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://assets/textures/grass-texture-26.jpg" type="Texture" id=1] + +[sub_resource type="CubeMesh" id=1] + +[sub_resource type="SpatialMaterial" id=3] +albedo_texture = ExtResource( 1 ) + +[sub_resource type="BoxShape" id=2] + +[node name="StaticBody" type="StaticBody"] + +[node name="MeshInstance" type="MeshInstance" parent="."] +transform = Transform( 10, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0 ) +mesh = SubResource( 1 ) +skeleton = NodePath("../CollisionShape") +material/0 = SubResource( 3 ) + +[node name="CollisionShape" type="CollisionShape" parent="."] +transform = Transform( 10, 0, 0, 0, 1, 0, 0, 0, 10, 0, 0, 0 ) +shape = SubResource( 2 ) diff --git a/godot/scenes/levels/test_scene_movement/TestSceneMovement.tscn b/godot/scenes/levels/test_scene_movement/TestSceneMovement.tscn new file mode 100644 index 0000000..dc25498 --- /dev/null +++ b/godot/scenes/levels/test_scene_movement/TestSceneMovement.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://scenes/levels/test_scene_uuuhhh/Wall.tscn" type="PackedScene" id=1] +[ext_resource path="res://scenes/levels/test_scene_uuuhhh/Floor.tscn" type="PackedScene" id=2] +[ext_resource path="res://scenes/Die.tscn" type="PackedScene" id=3] + +[node name="TestScene" type="Spatial"] + +[node name="Floor" parent="." instance=ExtResource( 2 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.0290833, -0.981747, 0.00208664 ) + +[node name="Floor2" parent="." instance=ExtResource( 2 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, -20 ) + +[node name="Floor3" parent="." instance=ExtResource( 2 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 20, -1, 0 ) + +[node name="Floor4" parent="." instance=ExtResource( 2 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 20, -1, -20 ) + +[node name="Floor5" parent="." instance=ExtResource( 2 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 40, -1, 0 ) + +[node name="Floor6" parent="." instance=ExtResource( 2 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 40, -1, -20 ) + +[node name="Wall" parent="." instance=ExtResource( 1 )] +transform = Transform( 0.766044, 0, 0.642788, 0, 2, 0, -0.642788, 0, 0.766044, 19.47, 0, -14 ) + +[node name="Die" parent="." instance=ExtResource( 3 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.759363, 4.18965, -3.60846 ) diff --git a/godot/scenes/levels/test_scene_movement/Wall.tscn b/godot/scenes/levels/test_scene_movement/Wall.tscn new file mode 100644 index 0000000..e3afe23 --- /dev/null +++ b/godot/scenes/levels/test_scene_movement/Wall.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://assets/textures/sandstone-brick-wall-texture.jpg" type="Texture" id=1] + +[sub_resource type="CubeMesh" id=1] + +[sub_resource type="SpatialMaterial" id=2] +albedo_texture = ExtResource( 1 ) + +[sub_resource type="ConvexPolygonShape" id=3] +points = PoolVector3Array( 1, 1, 1, 1, 1, -1, -1, 1, 1, 1, -1, 1, 1, -1, -1, -1, 1, -1, -1, -1, 1, -1, -1, -1 ) + +[node name="StaticBody" type="StaticBody"] + +[node name="MeshInstance" type="MeshInstance" parent="."] +transform = Transform( 0.3, 0, 0, 0, 1, 0, 0, 0, 5, 0, 1, 0 ) +mesh = SubResource( 1 ) +skeleton = NodePath("") +material/0 = SubResource( 2 ) + +[node name="CollisionShape" type="CollisionShape" parent="."] +transform = Transform( 0.3, 0, 0, 0, 1, 0, 0, 0, 5, 0, 1, 0 ) +shape = SubResource( 3 ) diff --git a/godot/scenes/levels/test_scene_uuuhhh/TestSceneUuuhhh.tscn b/godot/scenes/levels/test_scene_uuuhhh/TestSceneUuuhhh.tscn index a8f9003..0820451 100644 --- a/godot/scenes/levels/test_scene_uuuhhh/TestSceneUuuhhh.tscn +++ b/godot/scenes/levels/test_scene_uuuhhh/TestSceneUuuhhh.tscn @@ -4,7 +4,7 @@ [ext_resource path="res://scenes/levels/test_scene_uuuhhh/Floor.tscn" type="PackedScene" id=2] [ext_resource path="res://scenes/scripts/roblox-cube.gd" type="Script" id=3] [ext_resource path="res://assets/sounds/Uuhhh.mp3" type="AudioStream" id=4] -[ext_resource path="res://scenes/objects/W8.tscn" type="PackedScene" id=5] +[ext_resource path="res://scenes/Die.tscn" type="PackedScene" id=5] [node name="TestScene" type="Spatial"] diff --git a/godot/scenes/objects/Camera.tscn b/godot/scenes/objects/Camera.tscn new file mode 100644 index 0000000..1c13dd0 --- /dev/null +++ b/godot/scenes/objects/Camera.tscn @@ -0,0 +1,10 @@ +[gd_scene format=2] + +[node name="CameraRoot" type="Spatial"] + +[node name="CameraArmHorizontal" type="Spatial" parent="."] + +[node name="CameraArmVertical" type="Spatial" parent="CameraArmHorizontal"] + +[node name="Camera" type="Camera" parent="CameraArmHorizontal/CameraArmVertical"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 10 ) diff --git a/godot/scenes/objects/Player.tscn b/godot/scenes/objects/Player.tscn new file mode 100644 index 0000000..cc3662e --- /dev/null +++ b/godot/scenes/objects/Player.tscn @@ -0,0 +1,18 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://scenes/objects/W8.tscn" type="PackedScene" id=1] +[ext_resource path="res://scenes/objects/Camera.tscn" type="PackedScene" id=2] +[ext_resource path="res://native/BasicDie.gdns" type="Script" id=3] + +[node name="PlayerRoot" type="Spatial"] +script = ExtResource( 3 ) +camera/camera_clamp = Vector2( 0, -1.3 ) +shooting/max_force = 30.0 +shooting/up_angle = 0.3 +shooting/stopping_velocity = 0.003 + +[node name="W8" parent="." instance=ExtResource( 1 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, 0 ) + +[node name="Camera" parent="." instance=ExtResource( 2 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0 ) diff --git a/godot/scenes/objects/Scoreboard.gd b/godot/scenes/objects/Scoreboard.gd new file mode 100644 index 0000000..0f6d32b --- /dev/null +++ b/godot/scenes/objects/Scoreboard.gd @@ -0,0 +1,22 @@ +extends Control + +func update_values(values, pars): + $Panel/GridContainer/Player0.text = "%d" % values[0] + $Panel/GridContainer/Player1.text = "%d" % values[1] + $Panel/GridContainer/Player2.text = "%d" % values[2] + $Panel/GridContainer/Player3.text = "%d" % values[3] + $Panel/GridContainer/Player4.text = "%d" % values[4] + $Panel/GridContainer/Player5.text = "%d" % values[5] + $Panel/GridContainer/Player6.text = "%d" % values[6] + $Panel/GridContainer/Player7.text = "%d" % values[7] + $Panel/GridContainer/Player8.text = "%d" % values[8] + + $Panel/GridContainer/Par0.text = "%d" % pars[0] + $Panel/GridContainer/Par1.text = "%d" % pars[1] + $Panel/GridContainer/Par2.text = "%d" % pars[2] + $Panel/GridContainer/Par3.text = "%d" % pars[3] + $Panel/GridContainer/Par4.text = "%d" % pars[4] + $Panel/GridContainer/Par5.text = "%d" % pars[5] + $Panel/GridContainer/Par6.text = "%d" % pars[6] + $Panel/GridContainer/Par7.text = "%d" % pars[7] + $Panel/GridContainer/Par8.text = "%d" % pars[8] diff --git a/godot/scenes/objects/Scoreboard.tscn b/godot/scenes/objects/Scoreboard.tscn new file mode 100644 index 0000000..ab9c887 --- /dev/null +++ b/godot/scenes/objects/Scoreboard.tscn @@ -0,0 +1,433 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://assets/theme.tres" type="Theme" id=1] +[ext_resource path="res://scenes/objects/Scoreboard.gd" type="Script" id=2] + +[node name="Scoreboard" type="Control"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_right = -0.320004 +margin_bottom = 0.48 +script = ExtResource( 2 ) + +[node name="Panel" type="Panel" parent="."] +anchor_right = 1.0 +anchor_bottom = 0.952 +margin_left = 120.0 +margin_top = 120.0 +margin_right = -119.68 +margin_bottom = -665.617 + +[node name="GridContainer" type="GridContainer" parent="Panel"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 50.0 +margin_top = 50.0 +columns = 10 + +[node name="LabelHeader" type="Label" parent="Panel/GridContainer"] +margin_right = 159.0 +margin_bottom = 51.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "Hole" +align = 3 +valign = 3 +autowrap = true + +[node name="Label" type="Label" parent="Panel/GridContainer"] +margin_left = 163.0 +margin_right = 322.0 +margin_bottom = 51.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "1" +align = 3 +valign = 3 +autowrap = true + +[node name="Label2" type="Label" parent="Panel/GridContainer"] +margin_left = 326.0 +margin_right = 485.0 +margin_bottom = 51.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "2" +align = 3 +valign = 3 +autowrap = true + +[node name="Label3" type="Label" parent="Panel/GridContainer"] +margin_left = 489.0 +margin_right = 648.0 +margin_bottom = 51.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "3" +align = 3 +valign = 3 +autowrap = true + +[node name="Label4" type="Label" parent="Panel/GridContainer"] +margin_left = 652.0 +margin_right = 811.0 +margin_bottom = 51.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "4" +align = 3 +valign = 3 +autowrap = true + +[node name="Label5" type="Label" parent="Panel/GridContainer"] +margin_left = 815.0 +margin_right = 974.0 +margin_bottom = 51.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "5" +align = 3 +valign = 3 +autowrap = true + +[node name="Label6" type="Label" parent="Panel/GridContainer"] +margin_left = 978.0 +margin_right = 1137.0 +margin_bottom = 51.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "6" +align = 3 +valign = 3 +autowrap = true + +[node name="Label7" type="Label" parent="Panel/GridContainer"] +margin_left = 1141.0 +margin_right = 1300.0 +margin_bottom = 51.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "7" +align = 3 +valign = 3 +autowrap = true + +[node name="Label8" type="Label" parent="Panel/GridContainer"] +margin_left = 1304.0 +margin_right = 1463.0 +margin_bottom = 51.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "8" +align = 3 +valign = 3 +autowrap = true + +[node name="Label9" type="Label" parent="Panel/GridContainer"] +margin_left = 1467.0 +margin_right = 1626.0 +margin_bottom = 51.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "9" +align = 3 +valign = 3 +autowrap = true + +[node name="LabelHeader2" type="Label" parent="Panel/GridContainer"] +margin_top = 55.0 +margin_right = 159.0 +margin_bottom = 106.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "Par" +align = 3 +valign = 3 +autowrap = true + +[node name="Par0" type="Label" parent="Panel/GridContainer"] +margin_left = 163.0 +margin_top = 55.0 +margin_right = 322.0 +margin_bottom = 106.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Par1" type="Label" parent="Panel/GridContainer"] +margin_left = 326.0 +margin_top = 55.0 +margin_right = 485.0 +margin_bottom = 106.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Par2" type="Label" parent="Panel/GridContainer"] +margin_left = 489.0 +margin_top = 55.0 +margin_right = 648.0 +margin_bottom = 106.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Par3" type="Label" parent="Panel/GridContainer"] +margin_left = 652.0 +margin_top = 55.0 +margin_right = 811.0 +margin_bottom = 106.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Par4" type="Label" parent="Panel/GridContainer"] +margin_left = 815.0 +margin_top = 55.0 +margin_right = 974.0 +margin_bottom = 106.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Par5" type="Label" parent="Panel/GridContainer"] +margin_left = 978.0 +margin_top = 55.0 +margin_right = 1137.0 +margin_bottom = 106.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Par6" type="Label" parent="Panel/GridContainer"] +margin_left = 1141.0 +margin_top = 55.0 +margin_right = 1300.0 +margin_bottom = 106.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Par7" type="Label" parent="Panel/GridContainer"] +margin_left = 1304.0 +margin_top = 55.0 +margin_right = 1463.0 +margin_bottom = 106.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Par8" type="Label" parent="Panel/GridContainer"] +margin_left = 1467.0 +margin_top = 55.0 +margin_right = 1626.0 +margin_bottom = 106.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="LabelHeader3" type="Label" parent="Panel/GridContainer"] +margin_top = 110.0 +margin_right = 159.0 +margin_bottom = 161.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "Player" +align = 3 +valign = 3 +autowrap = true + +[node name="Player0" type="Label" parent="Panel/GridContainer"] +margin_left = 163.0 +margin_top = 110.0 +margin_right = 322.0 +margin_bottom = 161.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Player1" type="Label" parent="Panel/GridContainer"] +margin_left = 326.0 +margin_top = 110.0 +margin_right = 485.0 +margin_bottom = 161.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Player2" type="Label" parent="Panel/GridContainer"] +margin_left = 489.0 +margin_top = 110.0 +margin_right = 648.0 +margin_bottom = 161.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Player3" type="Label" parent="Panel/GridContainer"] +margin_left = 652.0 +margin_top = 110.0 +margin_right = 811.0 +margin_bottom = 161.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Player4" type="Label" parent="Panel/GridContainer"] +margin_left = 815.0 +margin_top = 110.0 +margin_right = 974.0 +margin_bottom = 161.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Player5" type="Label" parent="Panel/GridContainer"] +margin_left = 978.0 +margin_top = 110.0 +margin_right = 1137.0 +margin_bottom = 161.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Player6" type="Label" parent="Panel/GridContainer"] +margin_left = 1141.0 +margin_top = 110.0 +margin_right = 1300.0 +margin_bottom = 161.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Player7" type="Label" parent="Panel/GridContainer"] +margin_left = 1304.0 +margin_top = 110.0 +margin_right = 1463.0 +margin_bottom = 161.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true + +[node name="Player8" type="Label" parent="Panel/GridContainer"] +margin_left = 1467.0 +margin_top = 110.0 +margin_right = 1626.0 +margin_bottom = 161.0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +size_flags_stretch_ratio = 20.0 +theme = ExtResource( 1 ) +text = "0" +align = 3 +valign = 3 +autowrap = true diff --git a/godot/scenes/objects/W8.tscn b/godot/scenes/objects/W8.tscn index 91f58eb..8766011 100644 --- a/godot/scenes/objects/W8.tscn +++ b/godot/scenes/objects/W8.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=6 format=2] [ext_resource path="res://assets/game_objects/W8baseColor_Mat.material" type="Material" id=2] @@ -20,12 +20,27 @@ surfaces/0 = { [sub_resource type="ConvexPolygonShape" id=2] points = PoolVector3Array( -0.0850063, -0.879389, -0.0282584, 0.0288993, 0.929375, 0.0289349, 0.0288993, 0.929375, -0.0289349, 0.929367, -0.0289314, 0.0289314, -0.0289784, -0.0289338, 0.929338, -0.929369, 0.028929, 0.028929, 0.0288993, -0.0289349, -0.929375, 0.0288993, -0.929375, 0.0289349, -0.0850063, 0.0282584, -0.879389, 0.0282247, 0.084959, 0.87945, 0.857489, 0.056933, -0.0855785, -0.879454, -0.0849424, 0.0282549, 0.0570775, -0.885814, -0.0571088, 0.0570775, -0.0571088, 0.885814, -0.0571532, 0.885743, -0.0571043, -0.0571532, 0.885743, 0.0571043, 0.0570775, 0.0571088, -0.885814, -0.885806, -0.057097, -0.057097, 0.879446, 0.0849494, 0.0282572, 0.857335, -0.0571018, -0.0855632, -0.0571532, 0.0571043, 0.885743, -0.0571532, -0.885743, 0.0571043, -0.885806, 0.057097, -0.057097, -0.0571532, -0.0571043, -0.885743, 0.0570775, 0.0571088, 0.885814, -0.0571532, -0.885743, -0.0571043, -0.0571532, 0.0571043, -0.885743, 0.0570775, -0.885814, 0.0571088, 0.0570775, 0.885814, 0.0571088, -0.0571532, -0.0571043, 0.885743, -0.885806, 0.057097, 0.057097, 0.0570775, 0.885814, -0.0571088, 0.0570775, -0.0571088, -0.885814, 0.857335, -0.0571018, 0.0855632, -0.885806, -0.057097, 0.057097, 0.857489, 0.056933, 0.0855785, 0.929425, 0.0287513, -0.0289333, 0.929367, -0.0289314, -0.0289314, -0.0289784, 0.929338, -0.0289338, 0.0288993, 0.0289349, -0.929375, -0.929369, -0.028929, -0.028929, -0.0283039, -0.87942, -0.0849561, 0.084933, 0.0282608, 0.879461, -0.0289784, 0.929338, 0.0289338, -0.0289784, -0.0289338, -0.929338, -0.0289784, 0.0289338, 0.929338, 0.0288993, -0.0289349, 0.929375, 0.0288993, -0.929375, -0.0289349, -0.0289784, -0.929338, 0.0289338, -0.929369, 0.028929, -0.028929, -0.0283039, 0.0849561, -0.87942, -0.879454, -0.0282549, 0.0849424, 0.879512, 0.0280816, 0.0849558, 0.879446, -0.0849494, -0.0282572, -0.0282988, -0.822574, 0.141805, 0.17021, 0.0280745, -0.794261, -0.879454, 0.0849424, -0.0282549, -0.0283039, 0.87942, 0.0849561, 0.0282247, 0.87945, -0.084959, 0.0282247, -0.084959, -0.87945, -0.879454, -0.0282549, -0.0849424, -0.0850063, 0.0282584, 0.879389, -0.0850063, 0.879389, 0.0282584, 0.084933, -0.0282608, 0.879461 ) +[sub_resource type="SphereShape" id=3] + +[sub_resource type="SphereMesh" id=4] + [node name="RigidBody" type="RigidBody"] -[node name="Cone" type="MeshInstance" parent="."] +[node name="MeshDie" type="MeshInstance" parent="."] mesh = SubResource( 1 ) skeleton = NodePath("../..") material/0 = null -[node name="CollisionShape" type="CollisionShape" parent="."] +[node name="CollisionShapeDie" type="CollisionShape" parent="."] shape = SubResource( 2 ) + +[node name="CollisionShapeSphere" type="CollisionShape" parent="."] +transform = Transform( 0.7, 0, 0, 0, 0.7, 0, 0, 0, 0.7, 0, 0, 0 ) +shape = SubResource( 3 ) +disabled = true + +[node name="MeshSphere" type="MeshInstance" parent="."] +transform = Transform( 0.7, 0, 0, 0, 0.7, 0, 0, 0, 0.7, 0, 0, 0 ) +visible = false +mesh = SubResource( 4 ) +material/0 = ExtResource( 2 ) diff --git a/godot/scenes/objects/old/Die.tscn b/godot/scenes/objects/old/Die.tscn new file mode 100644 index 0000000..cab0d15 --- /dev/null +++ b/godot/scenes/objects/old/Die.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=2 format=2] + +[ext_resource path="res://scenes/Die.tscn" type="PackedScene" id=1] + +[node name="Die" type="Spatial"] + +[node name="Die" parent="." instance=ExtResource( 1 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.1, 0 ) + +[node name="CamRoot" type="Spatial" parent="Die"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.1, 0 ) diff --git a/godot/scenes/scripts/roblox-cube.gd b/godot/scenes/scripts/roblox-cube.gd deleted file mode 100644 index 453067b..0000000 --- a/godot/scenes/scripts/roblox-cube.gd +++ /dev/null @@ -1,22 +0,0 @@ -extends Spatial - - -# Declare member variables here. Examples: -# var a = 2 -# var b = "text" -func on_collision(other): - var ap = get_parent().get_node("AudioStreamPlayer") - ap.play() - - -# Called when the node enters the scene tree for the first time. -func _ready(): - var rb = self - rb.apply_impulse(Vector3(), Vector3(40, 1, 10)) - rb.connect("body_entered", self, "on_collision") - - -# Called every frame. 'delta' is the elapsed time since the previous frame. -#func _process(delta): -# pass - diff --git a/godot/scripts/GoalTriggerBox.gd b/godot/scripts/GoalTriggerBox.gd new file mode 100644 index 0000000..6e1034b --- /dev/null +++ b/godot/scripts/GoalTriggerBox.gd @@ -0,0 +1,22 @@ +extends Area + +const Loader = preload("res://scenes/Game.gd") +var loader: Loader = null + +# Called when the node enters the scene tree for the first time. +func _ready(): + loader = get_node("/root/Game") + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +#func _process(delta): +# pass + + +func _on_Area2_body_entered(body: RigidBody): + # return when body is not a rigidbody + if body == null: + return + + loader.end_level() + diff --git a/lib/x86_64-pc-windows-msvc/code_with_your_friends2022.dll b/lib/x86_64-pc-windows-msvc/code_with_your_friends2022.dll Binary files differnew file mode 100644 index 0000000..9c500ba --- /dev/null +++ b/lib/x86_64-pc-windows-msvc/code_with_your_friends2022.dll diff --git a/lib/x86_64-unknown-linux-gnu/libcode_with_your_friends2022.so b/lib/x86_64-unknown-linux-gnu/libcode_with_your_friends2022.so Binary files differindex 14b6058..962bdb5 100755 --- a/lib/x86_64-unknown-linux-gnu/libcode_with_your_friends2022.so +++ b/lib/x86_64-unknown-linux-gnu/libcode_with_your_friends2022.so diff --git a/rust/src/basic_die.rs b/rust/src/basic_die.rs new file mode 100644 index 0000000..304df90 --- /dev/null +++ b/rust/src/basic_die.rs @@ -0,0 +1,402 @@ +use std::borrow::Borrow; +use gdnative::api::*; +use gdnative::prelude::*; +use gdnative::core_types::VariantArray; +use crate::buff_trait::Buff; +use crate::buff_ball::BuffBall; +use crate::buff_bounce::BuffBounce; +use crate::buff_phase::BuffPhase; +use crate::buff_extra::BuffExtra; + +/// the input state for the player +enum InputState { + Default, + Shooting, + Moving +} + + +type SpatialRef = Option<Ref<Spatial>>; +type NodeRef = Option<Ref<Node>>; + +/// the basic die used by the player +#[derive(NativeClass)] +#[inherit(Spatial)] +#[register_with(Self::register_builder)] +pub struct BasicDie { + #[property(path="camera/camera_clamp")] + camera_clamp: Vector2, + #[property(path="shooting/max_force")] + max_force: f32, + #[property(path="shooting/up_angle")] + up_angle: f32, + #[property(path="shooting/stopping_velocity")] + stopping_velocity: f32, + #[property(path="shooting/stopping_min_milliseconds")] + stopping_min_ms: i64, + #[property(path="input/camera_mouse_sensitivity")] + mouse_sensitivity: Vector2, + #[property(path="input/shoot_sensitivity")] + shoot_sensitivity: f32, + #[property(path="input/current_buff_index")] + current_buff_index: i32, + + all_buffs: [Option<Box<dyn Buff>>; 5], + + input_state: InputState, + current_force: f32, + last_shot_time: i64, + + action_shooting: String, + + node_die: SpatialRef, + + node_camera_root: SpatialRef, + node_camera_arm_horizontal: SpatialRef, + node_camera_arm_vertical: SpatialRef, + node_camera: SpatialRef, + node_loader: NodeRef, +} + +#[methods] +impl BasicDie { + // Register the builder for methods, properties and/or signals. + fn register_builder(_builder: &ClassBuilder<Self>) { + godot_print!("BasicDie builder is registered!"); + } + + fn new(_owner: &Spatial) -> Self { + BasicDie { + camera_clamp: Vector2 { x: 0.0, y: 0.0 }, + max_force: 0.0, + up_angle: 5.0, + stopping_velocity: 0.0, + stopping_min_ms: 1000, + mouse_sensitivity: Vector2 { x: 1.0, y: 1.0 }, + shoot_sensitivity: 1.0, + current_buff_index: 0, + all_buffs: [None, None, None, None, None], + + input_state: InputState::Default, + current_force: 0.0, + last_shot_time: 0, + + action_shooting: String::from("mouse_btn_left"), + + node_die: None, + + node_camera_root: None, + node_camera_arm_horizontal: None, + node_camera_arm_vertical: None, + node_camera: None, + node_loader: None, + } + } + + #[export] + unsafe fn _ready(&mut self, owner: &Spatial) { + + Input::godot_singleton().set_mouse_mode(Input::MOUSE_MODE_CAPTURED); + owner.set_physics_process(true); + + self.last_shot_time = OS::godot_singleton().get_ticks_msec(); + + let search_node = | parent: &SpatialRef, name: String | { + let parent_node = match parent { + Some(node) => node.assume_safe().as_ref(), + None => owner + }; + match parent_node.get_node(NodePath::from_str(&name)) { + None => { godot_warn!("Could not find {}.", name); None }, + Some(node) => { + let save_node = node.assume_safe(); + match save_node.cast::<Spatial>() { + None => { godot_warn!("{} was not of type 'Spatial'.", name); None }, + Some(casted) => Some(casted.claim()) + } + } + } + }; + + // look for the camera and arm nodes + self.node_camera_root = search_node(&None, String::from("Camera")); + self.node_camera_arm_horizontal = search_node(&self.node_camera_root, String::from("CameraArmHorizontal")); + self.node_camera_arm_vertical = search_node(&self.node_camera_arm_horizontal, String::from("CameraArmVertical")); + self.node_camera = search_node(&self.node_camera_arm_vertical, String::from("Camera")); + + // look for the level loader in the hierarchy + self.node_loader = owner.get_node("/root/Game/LevelLoader"); + + godot_print!("{:?}", self.node_camera_root); + godot_print!("{:?}", self.node_camera_arm_horizontal); + godot_print!("{:?}", self.node_camera_arm_vertical); + godot_print!("{:?}", self.node_camera); + godot_print!("{:?}", self.node_loader); + + self.node_die = search_node(&None, String::from("W8")); + + let die = match self.node_die { + None => { godot_warn!("No W8 assigned."); return; }, + Some(node) => + match node.assume_safe().cast::<RigidBody>() { + None => { godot_warn!("W8 is not a RigidBody."); return; }, + Some(rb) => rb.claim() + } + }; + + self.all_buffs = [ + None, + Some(Box::new(BuffBall ::new(Box::new(die)))), + Some(Box::new(BuffBounce::new(Box::new(die)))), + Some(Box::new(BuffPhase ::new(Box::new(die)))), + Some(Box::new(BuffExtra ::new())), + ]; + + godot_print!("Current Buff: {}", self.current_buff_index); + godot_print!("Player is ready"); + } + + #[export] + unsafe fn _physics_process(&mut self, _owner: &Spatial, _delta: f64) { + + let die = match self.node_die { + None => { godot_warn!("No W8 assigned."); return; }, + Some(node) => match node.assume_safe().cast::<RigidBody>() { + None => { godot_warn!("W8 is not a RigidBody."); return; }, + Some(rb) => rb + } + }; + + // let the cam follow the die + match self.node_camera_root { + None => { godot_warn!("No W8 assigned."); }, + Some(cam) => { + cam.assume_safe().set_translation(die.translation()); + } + } + + let delta_ms = OS::godot_singleton().get_ticks_msec() - self.last_shot_time; + + // deactivate the Ball Buff after 5 seconds + if matches!(self.input_state, InputState::Moving) + && delta_ms > 5000 + && self.current_buff_index == 1 { + self.stop_die(_owner); + } + + // detect if the die stops moving + if matches!(self.input_state, InputState::Moving) + && (delta_ms > self.stopping_min_ms) { + + // check if the velocity is less than the threshold and change input state in that case + let current_vel = die.linear_velocity().length(); + if current_vel <= self.stopping_velocity { + self.input_state = InputState::Default; + godot_print!("Die stopped moving at velocity {} after {} ms", current_vel, delta_ms); + + self.stop_die(_owner); + } + }; + } + + #[export] + unsafe fn _input(&mut self, _owner: &Spatial, event: Ref<InputEvent>) { + + self.general_input(event.borrow()); + + match self.input_state { + InputState::Default => self.default_input(event), + InputState::Shooting => self.shooting_input(event), + InputState::Moving => self.moving_input(event), + } + } + + /// this input method will always be called, regardless of the input state + unsafe fn general_input(&mut self, event: &Ref<InputEvent>) { + let save_event = event.assume_safe(); + + // rotate camera horizontally + let mouse_event = save_event.cast::<InputEventMouseMotion>(); // get the input as mouse input + match mouse_event { + Some(motion_event) => { + let x_mov = motion_event.relative().x * self.mouse_sensitivity.x; + self.rotate_cam_horizontal(x_mov); + }, + _ => {} + } + + let key_event = save_event.cast::<InputEventKey>(); + match key_event { + Some(key_event) => { + if key_event.scancode() == GlobalConstants::KEY_ESCAPE { + Input::godot_singleton().set_mouse_mode(Input::MOUSE_MODE_VISIBLE); + } + }, + _ => {} + } + } + + /// this input method will be called when looking around, before taking a shot + unsafe fn default_input(&mut self, event: Ref<InputEvent>) { + let save_event = event.assume_safe(); + + // left mouse button was pressed => switch to shooting mode + if save_event.is_action_pressed(GodotString::from_str(&self.action_shooting), false, false) { + godot_print!("mouse_button, switching to shooting mode"); + self.input_state = InputState::Shooting; + return; + } + + // rotate camera vertically + let mouse_event = save_event.cast::<InputEventMouseMotion>(); // get the input as mouse input + match mouse_event { + Some(motion_event) => { + let y_mov = -motion_event.relative().y * self.mouse_sensitivity.y; + self.rotate_cam_vertical(y_mov); + }, + _ => {} + }; + } + + /// this input method will be called when player is currently taking a shot + unsafe fn shooting_input(&mut self, event: Ref<InputEvent>) { + let save_event = event.assume_safe(); + + // mouse released, shoot + if save_event.is_action_released(GodotString::from_str(&self.action_shooting), false) { + self.input_state = InputState::Moving; + self.shoot(); + self.current_force = 0.0; + return; + } + + // charge shot with vertical mouse movement + let mouse_event = save_event.cast::<InputEventMouseMotion>(); // get the input as mouse input + match mouse_event { + Some(motion_event) => { + let y_mov = motion_event.relative().y * self.shoot_sensitivity; + self.current_force = match self.current_force + y_mov { + x if x < 0.0 => 0.0, + x if x > self.max_force => self.max_force, + x => x + }; + + godot_print!("current force: {}", self.current_force); + }, + _ => {} + }; + } + + /// this input method will be called when player is moving + unsafe fn moving_input(&mut self, event: Ref<InputEvent>) { + let save_event = event.assume_safe(); + + // rotate camera vertically + let mouse_event = save_event.cast::<InputEventMouseMotion>(); // get the input as mouse input + match mouse_event { + Some(motion_event) => { + let y_mov = motion_event.relative().y * self.mouse_sensitivity.y; + self.rotate_cam_vertical(y_mov); + }, + _ => {} + }; + } + + unsafe fn rotate_cam_horizontal(&mut self, input: f32) { + // make sure the arm exists + match self.node_camera_arm_horizontal { + Some(arm) => { + // rotate the horizontal camera arm + let save_arm = arm.assume_safe(); + save_arm.rotate_object_local(Vector3 {x: 0.0, y: 1.0, z: 0.0}, input as f64) + }, + _ => godot_warn!("No horizontal camera arm assigned.") + } + } + + unsafe fn rotate_cam_vertical(&mut self, input: f32) { + // make sure the camera arm actually exists + match self.node_camera_arm_vertical { + Some(arm) => { + // check for the current rotation + let save_arm = arm.assume_safe(); + let current_rot = save_arm.rotation(); + + // clamp the rotation + if current_rot.x + input > self.camera_clamp.x || current_rot.x + input <= self.camera_clamp.y { + return; + } + + // actually rotate if possible + let save_arm = arm.assume_safe(); + save_arm.rotate_object_local(Vector3 {x: 1.0, y: 0.0, z: 0.0}, input as f64) + }, + _ => godot_warn!("No vertical camera arm assigned") + } + } + + unsafe fn shoot(&mut self) { + + // make sure the camera actually exists + let impulse_dir = match self.node_camera { + None => { godot_warn!("No camera assigned!"); return; }, + Some(cam) => { + // get the forward vector of the camera setting the up angle to the defined value in the editor + let mut forward_vector = -cam.assume_safe().global_transform().basis.c().normalized(); + forward_vector.y = self.up_angle; + + // calculate the impulse force + forward_vector.normalized() * self.current_force + } + }; + + // get the die + let die = match self.node_die { + None => { godot_warn!("No W8 assigned."); return; }, + Some(node) => + match node.assume_safe().cast::<RigidBody>() { + None => { godot_warn!("W8 is not a RigidBody."); return; }, + Some(rb) => rb + } + }; + + // actually add the force + die.apply_impulse(die.transform().origin, impulse_dir); + + self.last_shot_time = OS::godot_singleton().get_ticks_msec(); + + // call the stuff in GDScript + match self.node_loader { + Some(loader) => { + let save_loader = loader.assume_safe(); + save_loader.call("add_stroke", &[]); + }, + None => godot_warn!("No node loader assigned"), + } + } + + unsafe fn stop_die(&mut self, owner: &Spatial) { + //deactivate the old buff + godot_print!("Current Buff: {}", self.current_buff_index); + match self.all_buffs[self.current_buff_index as usize] { + Some(ref mut buff) => buff.revert_buff(), + None => {} + } + + // get the facing direction of the die and determine the next buff based on that + match self.node_die { + Some(die) => { + let forward = die.assume_safe().global_transform().basis.c().normalized(); + godot_print!("forward: {} | {} | {}", forward.x, forward.y, forward.z); + }, + None => {} + } + + // apply the current buff + godot_print!("Current Buff: {}", self.current_buff_index); + match self.all_buffs[self.current_buff_index as usize] { + Some(ref mut buff) => buff.execute_buff(), + None => {} + } + } +} diff --git a/rust/src/buff_ball.rs b/rust/src/buff_ball.rs index 4b89dbb..219e675 100644 --- a/rust/src/buff_ball.rs +++ b/rust/src/buff_ball.rs @@ -2,71 +2,66 @@ use gdnative::api::*; use gdnative::prelude::*; use crate::buff_trait::Buff; -struct BuffBall { +pub struct BuffBall { name: String, description: String, - - die_body: Option<Ref<RigidBody>>, - sphere_body: Option<Ref<RigidBody>> + collision_die: Ref<CollisionShape>, + collision_sphere: Ref<CollisionShape>, + mesh_die: Ref<MeshInstance>, + mesh_sphere: Ref<MeshInstance>, } impl BuffBall { - fn new(die_body: Option<Ref<RigidBody>>, sphere_body: Option<Ref<RigidBody>>) -> Self { + + pub fn new(die_body: Box<Ref<RigidBody>>) -> Self { + + // find a collision shape + fn search<T: SubClass<Node>> (die_body: &Box<Ref<RigidBody>>, name: String) -> Option<Ref<T>> { + unsafe{ + match die_body.assume_safe().get_node(&name) { + None => { + godot_warn!("Could not find {}", name); + None + } + Some(node) => { + match node.assume_safe().cast::<T>() { + None => { + godot_warn!("{} is not a {}", name, std::any::type_name::<T>()); + None + }, + Some(cs) => Some(cs.claim()) + } + } + } + } + } + BuffBall { name: String::from("Ball"), description: String::from("Roll the dice"), - - die_body, - sphere_body + collision_die: search::<CollisionShape>(&die_body, String::from("CollisionShapeDie" )).unwrap(), + collision_sphere: search::<CollisionShape>(&die_body, String::from("CollisionShapeSphere")).unwrap(), + mesh_die: search::<MeshInstance>(&die_body, String::from("MeshDie" )).unwrap(), + mesh_sphere: search::<MeshInstance>(&die_body, String::from("MeshSphere")).unwrap(), } } } impl Buff for BuffBall { unsafe fn execute_buff(&mut self) { - // make sure the sphere rigid body exists - match &self.sphere_body { - Some(sphere) => { - // make sure the dice rigid body exists - match &self.die_body { - Some(die) => { - // get the safe references from the ref<> - let save_sphere = sphere.assume_safe(); - let save_die = die.assume_safe(); - - // set the properties of the rigid bodies - save_die.set_process(false); - save_sphere.set_process(true); - save_sphere.show(); - }, - None => godot_warn!("Die body not assigned") - } - }, - None => godot_warn!("Sphere body not assigned") - } + self.collision_die.assume_safe().set_disabled(true); + self.collision_sphere.assume_safe().set_disabled(false); + self.mesh_die.assume_safe().set_visible(false); + self.mesh_sphere.assume_safe().set_visible(true); + godot_print!("Ball activated"); } unsafe fn revert_buff(&mut self) { - // make sure the sphere rigid body exists - match &self.sphere_body { - Some(sphere) => { - // make sure the dice rigid body exists - match &self.die_body { - Some(die) => { - // get the safe references from the ref<> - let save_sphere = sphere.assume_safe(); - let save_die = die.assume_safe(); - - // set the properties of the rigid bodies - save_die.set_process(true); - save_sphere.set_process(false); - save_sphere.hide(); - }, - None => godot_warn!("Die body not assigned") - } - }, - None => godot_warn!("Sphere body not assigned") - } + self.collision_die.assume_safe().set_disabled(false); + self.collision_sphere.assume_safe().set_disabled(true); + self.mesh_sphere.assume_safe().set_visible(false); + self.mesh_die.assume_safe().set_visible(true); + godot_print!("Ball deactivated"); } fn get_name(self) -> GodotString { diff --git a/rust/src/buff_bounce.rs b/rust/src/buff_bounce.rs index 179642d..cb9ded8 100644 --- a/rust/src/buff_bounce.rs +++ b/rust/src/buff_bounce.rs @@ -2,22 +2,21 @@ use gdnative::api::*; use gdnative::prelude::*; use crate::buff_trait::Buff; -struct BuffBounce { +pub struct BuffBounce { name: String, description: String, - rigid_body: Option<Ref<RigidBody>>, + rigid_body: Box<Ref<RigidBody>>, target_bounciness: f64, previous_bounciness: f64 } impl BuffBounce { - fn new(rigid_body: Option<Ref<RigidBody>>) -> Self { + pub fn new(rigid_body: Box<Ref<RigidBody>>) -> Self { BuffBounce { name: String::from("Bounce"), description: String::from("Let's the die bounce more than usual."), rigid_body, - target_bounciness: 1.0, previous_bounciness: 0.0 } @@ -25,43 +24,30 @@ impl BuffBounce { } impl Buff for BuffBounce { - unsafe fn execute_buff(&mut self) { - // make sure the rigid body exists - match &self.rigid_body { - Some(body) => { - let safe_body = body.assume_safe(); - // get the physics material - match safe_body.physics_material_override() { - Some(mat) => { - let save_mat = mat.assume_safe(); - self.previous_bounciness = save_mat.bounce(); - save_mat.set_bounce(self.target_bounciness); - }, - None => godot_warn!("Physics material was not found") - } + unsafe fn execute_buff(&mut self) { + // get the physics material + match self.rigid_body.assume_safe().physics_material_override() { + Some(mat) => { + let save_mat = mat.assume_safe(); + self.previous_bounciness = save_mat.bounce(); + save_mat.set_bounce(self.target_bounciness); }, - None => godot_warn!("No rigid body initialized to apply properties to") + None => godot_warn!("Physics material was not found") } + godot_print!("Bounce activated"); } unsafe fn revert_buff(&mut self) { - // make sure the rigid body exists - match &self.rigid_body { - Some(body) => { - let safe_body = body.assume_safe(); - - // get the physics material - match safe_body.physics_material_override() { - Some(mat) => { - let save_mat = mat.assume_safe(); - save_mat.set_bounce(self.previous_bounciness); - }, - None => godot_warn!("Physics material was not found") - } + // get the physics material + match self.rigid_body.assume_safe().physics_material_override() { + Some(mat) => { + let save_mat = mat.assume_safe(); + save_mat.set_bounce(self.previous_bounciness); }, - None => godot_warn!("No rigid body initialized to apply properties to") + None => godot_warn!("Physics material was not found") } + godot_print!("Bounce deactivated"); } fn get_name(self) -> GodotString { diff --git a/rust/src/buff_extra.rs b/rust/src/buff_extra.rs index 473cdde..a7b7902 100644 --- a/rust/src/buff_extra.rs +++ b/rust/src/buff_extra.rs @@ -2,13 +2,13 @@ use gdnative::api::*; use gdnative::prelude::*; use crate::buff_trait::Buff; -struct BuffExtra { +pub struct BuffExtra { name: String, description: String, } impl BuffExtra { - fn new() -> Self { + pub fn new() -> Self { BuffExtra { name: String::from("Extra Stroke"), description: String::from("One additional stroke that doesn't count"), diff --git a/rust/src/buff_phase.rs b/rust/src/buff_phase.rs index e64508e..f69fecc 100644 --- a/rust/src/buff_phase.rs +++ b/rust/src/buff_phase.rs @@ -2,16 +2,16 @@ use gdnative::api::*; use gdnative::prelude::*; use crate::buff_trait::Buff; -struct BuffPhase { +pub struct BuffPhase { name: String, description: String, - rigid_body: Option<Ref<RigidBody>>, + rigid_body: Box<Ref<RigidBody>>, wall_layer_bit: i64, } impl BuffPhase { - fn new(rigid_body: Option<Ref<RigidBody>>) -> Self { + pub fn new(rigid_body: Box<Ref<RigidBody>>) -> Self { // calculate the bit for the mask to enable/ disable collision detection let mask_layer = 2; let mask_bit = 2_i64.pow(mask_layer - 1); @@ -20,7 +20,6 @@ impl BuffPhase { name: String::from("Phase"), description: String::from("Phases through thin fences"), rigid_body, - wall_layer_bit: mask_bit, } } @@ -28,26 +27,12 @@ impl BuffPhase { impl Buff for BuffPhase { unsafe fn execute_buff(&mut self) { - match &self.rigid_body { - Some(body) => { - // actually disable the collision to the fences - let save_body = body.assume_safe(); - save_body.set_collision_mask_bit(self.wall_layer_bit, false); - }, - None => godot_warn!("Rigid body not found") - } + // actually disable the collision to the fences + self.rigid_body.assume_safe().set_collision_mask_bit(self.wall_layer_bit, false); } unsafe fn revert_buff(& mut self) { - // make sure the rigid body exists - match &self.rigid_body { - Some(body) => { - // actually enable the collision again - let save_body = body.assume_safe(); - save_body.set_collision_mask_bit(self.wall_layer_bit, false); - }, - None => godot_warn!("Rigid body not found") - } + self.rigid_body.assume_safe().set_collision_mask_bit(self.wall_layer_bit, false); } fn get_name(self) -> GodotString { diff --git a/rust/src/game.rs b/rust/src/game.rs deleted file mode 100644 index ece5a54..0000000 --- a/rust/src/game.rs +++ /dev/null @@ -1,46 +0,0 @@ -use gdnative::api::*; -use gdnative::prelude::*; - -/// The Game "class" -#[derive(NativeClass)] -#[inherit(Spatial)] -#[register_with(Self::register_builder)] -pub struct Game { - name: String, -} - -// __One__ `impl` block can have the `#[methods]` attribute, which will generate -// code to automatically bind any exported methods to Godot. -#[methods] -impl Game { - // Register the builder for methods, properties and/or signals. - fn register_builder(_builder: &ClassBuilder<Self>) { - godot_print!("Game builder is registered!"); - } - - /// The "constructor" of the class. - fn new(_owner: &Spatial) -> Self { - godot_print!("Game is created!"); - Game { - name: "".to_string(), - } - } - - // In order to make a method known to Godot, the #[export] attribute has to be used. - // In Godot script-classes do not actually inherit the parent class. - // Instead they are "attached" to the parent object, called the "owner". - // The owner is passed to every single exposed method. - #[export] - unsafe fn _ready(&mut self, _owner: &Spatial) { - // The `godot_print!` macro works like `println!` but prints to the Godot-editor - // output tab as well. - self.name = "Game".to_string(); - godot_print!("{} is ready!", self.name); - } - - // This function will be called in every frame - #[export] - unsafe fn _process(&self, _owner: &Spatial, delta: f64) { - godot_print!("Inside {} _process(), delta is {}", self.name, delta); - } -} diff --git a/rust/src/goal_trigger.rs b/rust/src/goal_trigger.rs new file mode 100644 index 0000000..457eb7b --- /dev/null +++ b/rust/src/goal_trigger.rs @@ -0,0 +1,30 @@ +use gdnative::api::*; +use gdnative::prelude::*; +use gdnative::core_types::VariantArray; +use gdnative::object::*; + +/// The SpinningCube "class" +#[derive(NativeClass)] +#[inherit(Node)] +pub struct GoalTriggerZone { + level_loader: Option<Ref<Node>>, +} + +#[methods] +impl GoalTriggerZone { + fn new(_owner: &Node) -> Self { + GoalTriggerZone { + level_loader: None, + } + } + + #[export] + unsafe fn _ready(&mut self, owner: &Node) { + // TODO get loader + } + + #[export] + fn overlap(&mut self, owner: &Node) { + godot_print!("OVERLAPPED"); + } +} diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 534955f..c8afc06 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -1,17 +1,27 @@ -mod game; -mod spinning_cube; mod buff_bounce; mod buff_phase; mod buff_trait; mod buff_ball; mod buff_extra; +<<<<<<< HEAD +pub mod goal_trigger; +mod test; +======= +>>>>>>> menu +mod basic_die; use gdnative::prelude::{godot_init, InitHandle}; // Function that registers all exposed classes to Godot fn init(handle: InitHandle) { +<<<<<<< HEAD handle.add_class::<game::Game>(); handle.add_class::<spinning_cube::SpinningCube>(); + handle.add_class::<goal_trigger::GoalTriggerZone>(); + handle.add_class::<test::SpinningCubeReverse>(); +======= +>>>>>>> menu + handle.add_class::<basic_die::BasicDie>(); } // macros that create the entry-points of the dynamic library. diff --git a/rust/src/spinning_cube.rs b/rust/src/spinning_cube.rs deleted file mode 100644 index 41b429f..0000000 --- a/rust/src/spinning_cube.rs +++ /dev/null @@ -1,58 +0,0 @@ -use gdnative::api::*; -use gdnative::prelude::*; - -/// The SpinningCube "class" -#[derive(NativeClass)] -#[inherit(MeshInstance)] -#[register_with(Self::register_builder)] -pub struct SpinningCube { - start: Vector3, - time: f32, - #[property(path = "base/rotate_speed")] - rotate_speed: f64, -} - -// __One__ `impl` block can have the `#[methods]` attribute, which will generate -// code to automatically bind any exported methods to Godot. -#[methods] -impl SpinningCube { - // Register the builder for methods, properties and/or signals. - fn register_builder(_builder: &ClassBuilder<Self>) { - godot_print!("SpinningCube builder is registered!"); - } - - /// The "constructor" of the class. - fn new(_owner: &MeshInstance) -> Self { - SpinningCube { - start: Vector3::new(0.0, 0.0, 0.0), - time: 0.0, - rotate_speed: 0.05, - } - } - - // In order to make a method known to Godot, the #[export] attribute has to be used. - // In Godot script-classes do not actually inherit the parent class. - // Instead they are "attached" to the parent object, called the "owner". - // The owner is passed to every single exposed method. - #[export] - unsafe fn _ready(&mut self, owner: &MeshInstance) { - owner.set_physics_process(true); - } - - #[export] - unsafe fn _physics_process(&mut self, owner: &MeshInstance, delta: f64) { - use gdnative::api::SpatialMaterial; - - self.time += delta as f32; - owner.rotate_y(self.rotate_speed * delta); - - let offset = Vector3::new(0.0, 1.0, 0.0) * self.time.cos() * 0.5; - owner.set_translation(self.start + offset); - - if let Some(mat) = owner.get_surface_material(0) { - let mat = mat.assume_safe(); - let mat = mat.cast::<SpatialMaterial>().expect("Incorrect material"); - mat.set_albedo(Color::from_rgba(self.time.cos().abs(), 0.0, 0.0, 1.0)); - } - } -} diff --git a/rust/src/test.rs b/rust/src/test.rs deleted file mode 100644 index 6c0774f..0000000 --- a/rust/src/test.rs +++ /dev/null @@ -1,58 +0,0 @@ -use gdnative::api::*; -use gdnative::prelude::*; - -/// The SpinningCube "class" -#[derive(NativeClass)] -#[inherit(MeshInstance)] -#[register_with(Self::register_builder)] -pub struct SpinningCubeReverse { - start: Vector3, - time: f32, - #[property(path = "base/rotate_speed")] - rotate_speed: f64, -} - -// __One__ `impl` block can have the `#[methods]` attribute, which will generate -// code to automatically bind any exported methods to Godot. -#[methods] -impl SpinningCubeReverse { - // Register the builder for methods, properties and/or signals. - fn register_builder(_builder: &ClassBuilder<Self>) { - godot_print!("SpinningCube builder is registered!"); - } - - /// The "constructor" of the class. - fn new(_owner: &MeshInstance) -> Self { - SpinningCubeReverse { - start: Vector3::new(0.0, 0.0, 0.0), - time: 0.0, - rotate_speed: 0.05, - } - } - - // In order to make a method known to Godot, the #[export] attribute has to be used. - // In Godot script-classes do not actually inherit the parent class. - // Instead they are "attached" to the parent object, called the "owner". - // The owner is passed to every single exposed method. - #[export] - unsafe fn _ready(&mut self, owner: &MeshInstance) { - owner.set_physics_process(true); - } - - #[export] - unsafe fn _physics_process(&mut self, owner: &MeshInstance, delta: f64) { - use gdnative::api::SpatialMaterial; - - self.time += delta as f32; - owner.rotate_y(self.rotate_speed * delta * -1.0); - - let offset = Vector3::new(0.0, 1.0, 0.0) * self.time.cos() * 0.5; - owner.set_translation(self.start + offset); - - if let Some(mat) = owner.get_surface_material(0) { - let mat = mat.assume_safe(); - let mat = mat.cast::<SpatialMaterial>().expect("Incorrect material"); - mat.set_albedo(Color::from_rgba(self.time.cos().abs(), 0.0, 0.0, 1.0)); - } - } -} |