diff --git a/assets/level/Level.glb b/assets/level/Level.glb index 534d54a..2e29c75 100644 Binary files a/assets/level/Level.glb and b/assets/level/Level.glb differ diff --git a/assets/level/Level.tscn b/assets/level/Level.tscn index d5f92e4..f4ae58f 100644 --- a/assets/level/Level.tscn +++ b/assets/level/Level.tscn @@ -1,12 +1,14 @@ -[gd_scene load_steps=3 format=2] +[gd_scene load_steps=4 format=2] [ext_resource path="res://assets/level/Level.glb" type="PackedScene" id=1] +[ext_resource path="res://scripts/Level.gd" type="Script" id=2] [sub_resource type="CylinderShape" id=1] height = 6.30212 radius = 2.14679 [node name="Level" instance=ExtResource( 1 )] +script = ExtResource( 2 ) [node name="RTG" type="StaticBody" parent="." index="81"] diff --git a/assets/level/Rock.material b/assets/level/Rock.material new file mode 100644 index 0000000..ef111ec Binary files /dev/null and b/assets/level/Rock.material differ diff --git a/assets/level/blinn1_002.material b/assets/level/blinn1_002.material new file mode 100644 index 0000000..f45a664 Binary files /dev/null and b/assets/level/blinn1_002.material differ diff --git a/assets/moon_buggy/Beetle IX.glb b/assets/moon_buggy/Beetle IX.glb new file mode 100644 index 0000000..7cc20cb Binary files /dev/null and b/assets/moon_buggy/Beetle IX.glb differ diff --git a/assets/moon_buggy/Beetle IX.glb.import b/assets/moon_buggy/Beetle IX.glb.import new file mode 100644 index 0000000..3144f46 --- /dev/null +++ b/assets/moon_buggy/Beetle IX.glb.import @@ -0,0 +1,1065 @@ +[remap] + +importer="scene" +type="PackedScene" +path="res://.import/Beetle IX.glb-2aeb3ed9427957e25ae958004994c812.scn" + +[deps] + +source_file="res://assets/moon_buggy/Beetle IX.glb" +dest_files=[ "res://.import/Beetle IX.glb-2aeb3ed9427957e25ae958004994c812.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 diff --git a/assets/moon_buggy/Beetle IX.tscn b/assets/moon_buggy/Beetle IX.tscn new file mode 100644 index 0000000..25eaa73 --- /dev/null +++ b/assets/moon_buggy/Beetle IX.tscn @@ -0,0 +1,68 @@ +[gd_scene load_steps=16 format=2] + +[ext_resource path="res://assets/moon_buggy/Beetle IX.glb" type="PackedScene" id=1] +[ext_resource path="res://scripts/Beetle IX.gd" type="Script" id=2] + +[sub_resource type="AnimationNodeAdd2" id=1] +filter_enabled = true +filters = [ "Armature/Skeleton:Back Wheel.L", "Armature/Skeleton:Back Wheel.R", "Armature/Skeleton:Front Wheel.L", "Armature/Skeleton:Front Wheel.R", "Armature/Skeleton:Middle Wheel.L", "Armature/Skeleton:Middle Wheel.R" ] + +[sub_resource type="AnimationNodeAnimation" id=2] +animation = "Wheel Turn-loop" + +[sub_resource type="AnimationNodeAnimation" id=3] +animation = "Driving-loop" + +[sub_resource type="AnimationNodeBlendTree" id=4] +nodes/Add2/node = SubResource( 1 ) +nodes/Add2/position = Vector2( 546.667, 80 ) +nodes/Animation/node = SubResource( 3 ) +nodes/Animation/position = Vector2( 213.333, 66.6667 ) +"nodes/Animation 2/node" = SubResource( 2 ) +"nodes/Animation 2/position" = Vector2( 160, 200 ) +nodes/output/position = Vector2( 813.333, 133.333 ) +node_connections = [ "Add2", 0, "Animation", "Add2", 1, "Animation 2", "output", 0, "Add2" ] + +[sub_resource type="AnimationNodeAnimation" id=5] +animation = "Idle-loop" + +[sub_resource type="AnimationNodeAnimation" id=6] +animation = "Reset" + +[sub_resource type="AnimationNodeAnimation" id=7] +animation = "Startup" + +[sub_resource type="AnimationNodeStateMachineTransition" id=8] + +[sub_resource type="AnimationNodeStateMachineTransition" id=9] + +[sub_resource type="AnimationNodeStateMachineTransition" id=10] +xfade_time = 1.3 + +[sub_resource type="AnimationNodeStateMachineTransition" id=11] +xfade_time = 0.1 + +[sub_resource type="AnimationNodeStateMachine" id=12] +states/driving/node = SubResource( 4 ) +states/driving/position = Vector2( 647.667, 97.6173 ) +states/idle/node = SubResource( 5 ) +states/idle/position = Vector2( 284.333, 83.8258 ) +states/reset/node = SubResource( 6 ) +states/reset/position = Vector2( 171, 180.523 ) +states/startup/node = SubResource( 7 ) +states/startup/position = Vector2( 457.667, 34.9054 ) +transitions = [ "reset", "idle", SubResource( 8 ), "idle", "startup", SubResource( 9 ), "startup", "driving", SubResource( 10 ), "driving", "idle", SubResource( 11 ) ] +start_node = "reset" +graph_offset = Vector2( -163, -60 ) + +[sub_resource type="AnimationNodeStateMachinePlayback" id=13] + +[node name="Beetle IX" instance=ExtResource( 1 )] +script = ExtResource( 2 ) + +[node name="AnimationTree" type="AnimationTree" parent="." index="2"] +tree_root = SubResource( 12 ) +anim_player = NodePath("../AnimationPlayer") +active = true +parameters/playback = SubResource( 13 ) +parameters/driving/Add2/add_amount = 1.0 diff --git a/assets/moon_buggy/Material.material b/assets/moon_buggy/Material.material new file mode 100644 index 0000000..2dae707 Binary files /dev/null and b/assets/moon_buggy/Material.material differ diff --git a/assets/moon_buggy/Material_001.material b/assets/moon_buggy/Material_001.material new file mode 100644 index 0000000..fbb9ac4 Binary files /dev/null and b/assets/moon_buggy/Material_001.material differ diff --git a/assets/moon_buggy/Material_002.material b/assets/moon_buggy/Material_002.material new file mode 100644 index 0000000..eec1da6 Binary files /dev/null and b/assets/moon_buggy/Material_002.material differ diff --git a/assets/moon_buggy/Solar Panels.material b/assets/moon_buggy/Solar Panels.material new file mode 100644 index 0000000..c6e8a09 Binary files /dev/null and b/assets/moon_buggy/Solar Panels.material differ diff --git a/assets/rover_level/RoverGame.glb b/assets/rover_level/RoverGame.glb index 0dccf41..9dbcdd1 100644 Binary files a/assets/rover_level/RoverGame.glb and b/assets/rover_level/RoverGame.glb differ diff --git a/project.godot b/project.godot index 546e06d..a3f2322 100644 --- a/project.godot +++ b/project.godot @@ -70,6 +70,11 @@ _global_script_classes=[ { "path": "res://addons/dialogic/Example Assets/History/HistoryRow.gd" }, { "base": "Resource", +"class": "Interface", +"language": "GDScript", +"path": "res://scripts/Interface.gd" +}, { +"base": "Resource", "class": "ItemType", "language": "GDScript", "path": "res://scripts/ItemType.gd" @@ -97,6 +102,7 @@ _global_script_class_icons={ "DialogicResources": "", "DialogicUtil": "", "HistoryRow": "", +"Interface": "", "ItemType": "", "Recipe": "", "RecipeDB": "" @@ -108,6 +114,10 @@ config/name="project-dung" run/main_scene="res://scenes/main.tscn" config/icon="res://icon.png" +[autoload] + +InterfaceChecker="*res://scripts/interface_checker.gd" + [display] window/size/width=1920 diff --git a/scenes/game_manager.tscn b/scenes/game_manager.tscn index ecdf8c1..c0317a0 100644 --- a/scenes/game_manager.tscn +++ b/scenes/game_manager.tscn @@ -2,7 +2,7 @@ [ext_resource path="res://scripts/game_manager.gd" type="Script" id=1] -[node name="game_manager" type="Node" groups=["game_manager"]] +[node name="game_manager" type="CanvasLayer" groups=["game_manager"]] script = ExtResource( 1 ) [node name="UI" type="Control" parent="."] diff --git a/scenes/main.tscn b/scenes/main.tscn index 3d6cf58..b7976f1 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=28 format=2] +[gd_scene load_steps=29 format=2] [ext_resource path="res://assets/level/Level.tscn" type="PackedScene" id=1] [ext_resource path="res://scripts/cameras.gd" type="Script" id=2] @@ -20,6 +20,7 @@ [ext_resource path="res://scenes/cheat_menu.tscn" type="PackedScene" id=18] [ext_resource path="res://item_types/ore.tres" type="Resource" id=19] [ext_resource path="res://recipes/all_recipes.tres" type="Resource" id=20] +[ext_resource path="res://scenes/rover_station.tscn" type="PackedScene" id=21] [sub_resource type="CylinderShape" id=1] height = 5.22615 @@ -375,6 +376,11 @@ text = "Communications" [node name="comm_station" parent="Communications" instance=ExtResource( 13 )] transform = Transform( 1, 3.49246e-10, -2.23517e-08, -3.49246e-10, 1, 1.60071e-10, 2.23517e-08, 1.78261e-10, 1, 0.664039, 5.58794e-09, -7.58252 ) +[node name="Rover_Room" type="Spatial" parent="."] +transform = Transform( -0.707107, 0, 0.707107, 0, 1, 0, -0.707107, 0, -0.707107, -11, 0, 11 ) + +[node name="rover_station" parent="Rover_Room" instance=ExtResource( 21 )] + [node name="CanvasLayer" type="CanvasLayer" parent="."] [node name="cheat_menu" parent="CanvasLayer" instance=ExtResource( 18 )] @@ -405,3 +411,5 @@ transform = Transform( 1, 3.49246e-10, -2.23517e-08, -3.49246e-10, 1, 1.60071e-1 [connection signal="player_exited" from="cameras/camera_comms" to="cameras" method="_on_camera_room_player_exited"] [connection signal="player_entered" from="cameras/camera_hydroponics" to="cameras" method="_on_camera_room_player_entered"] [connection signal="player_exited" from="cameras/camera_hydroponics" to="cameras" method="_on_camera_room_player_exited"] + +[editable path="Level"] diff --git a/scenes/player.tscn b/scenes/player.tscn index 9469523..93c10ff 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -714,7 +714,7 @@ mesh = SubResource( 1 ) skin = SubResource( 2 ) [node name="head_bone" type="BoneAttachment" parent="model_transform/DungMan/Armature/Skeleton" index="1"] -transform = Transform( 1, -2.21988e-16, 5.59982e-18, -6.93938e-20, 0.0249053, 0.99969, -2.22059e-16, -0.99969, 0.0249053, -3.32446e-16, -0.0244905, -1.49896 ) +transform = Transform( 1, -2.22045e-16, 5.12852e-23, 1.32349e-23, 2.83122e-07, 1, -2.22045e-16, -1, 2.83122e-07, -3.33067e-16, 5.21541e-08, -1.5 ) bone_name = "Item" [node name="ItemSpawn" type="Spatial" parent="model_transform/DungMan/Armature/Skeleton/head_bone"] diff --git a/scenes/rover.tscn b/scenes/rover.tscn index 7a7b789..36ea034 100644 --- a/scenes/rover.tscn +++ b/scenes/rover.tscn @@ -1,16 +1,11 @@ -[gd_scene load_steps=6 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://scripts/rover.gd" type="Script" id=1] +[ext_resource path="res://assets/moon_buggy/Beetle IX.tscn" type="PackedScene" id=2] [sub_resource type="CylinderShape" id=13] radius = 2.98085 -[sub_resource type="CubeMesh" id=2] -size = Vector3( 6, 2, 6 ) - -[sub_resource type="SpatialMaterial" id=12] -albedo_color = Color( 0.627451, 0.156863, 0.156863, 1 ) - [sub_resource type="BoxShape" id=9] extents = Vector3( 2.90757, 1, 2.12399 ) @@ -29,19 +24,17 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 ) shape = SubResource( 13 ) [node name="visual" type="Spatial" parent="."] - -[node name="MeshInstance" type="MeshInstance" parent="visual"] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 ) -mesh = SubResource( 2 ) -skeleton = NodePath("../../..") -material/0 = SubResource( 12 ) +transform = Transform( -1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0 ) [node name="interact_box" type="Area" parent="visual"] unique_name_in_owner = true -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -3.96067 ) +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -5.15549 ) collision_layer = 4 collision_mask = 8 [node name="CollisionShape" type="CollisionShape" parent="visual/interact_box"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1.39215 ) shape = SubResource( 9 ) + +[node name="BeetleIX" parent="visual" instance=ExtResource( 2 )] +transform = Transform( 2.3073, 0, 0, 0, 2.3073, 0, 0, 0, 2.3073, 0, 0, 0 ) diff --git a/scenes/rover_game.tscn b/scenes/rover_game.tscn index bc9fba3..01d2656 100644 --- a/scenes/rover_game.tscn +++ b/scenes/rover_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=9 format=2] +[gd_scene load_steps=8 format=2] [ext_resource path="res://scenes/rover.tscn" type="PackedScene" id=1] [ext_resource path="res://assets/rover_level/RoverGame.glb" type="PackedScene" id=4] @@ -8,14 +8,10 @@ [sub_resource type="BoxShape" id=7] extents = Vector3( 21.7976, 4.38074, 5.34608 ) -[sub_resource type="ProceduralSky" id=6] -sky_top_color = Color( 1, 1, 1, 1 ) -sky_horizon_color = Color( 0.721569, 0.721569, 0.721569, 1 ) - [sub_resource type="Environment" id=5] background_mode = 2 -background_sky = SubResource( 6 ) background_color = Color( 0.752941, 0.752941, 0.752941, 1 ) +ambient_light_color = Color( 0.32549, 0.32549, 0.32549, 1 ) ssao_enabled = true ssao_radius = 15.99 ssao_intensity = 3.14 @@ -29,13 +25,20 @@ extents = Vector3( 100, 1, 400 ) script = ExtResource( 6 ) [node name="RoverGame" parent="." instance=ExtResource( 4 )] +__meta__ = { +"_edit_group_": true +} [node name="rover" parent="." instance=ExtResource( 1 )] -transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.04923, 50 ) +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0511061, 50 ) mass = 2.0 +[node name="Camera" type="Camera" parent="rover/visual" index="2"] +transform = Transform( 1.19422e-07, 0.5, -0.866025, -4.37114e-08, 0.866025, 0.5, 1, -2.18557e-08, 1.25278e-07, -13.15, 6.519, 0.386 ) +far = 300.0 + [node name="rover_camera" type="Camera" parent="."] -transform = Transform( -4.37114e-08, 0.866025, -0.5, 0, 0.5, 0.866025, 1, 3.78552e-08, -2.18557e-08, -34.343, 66.514, 50 ) +transform = Transform( -4.37114e-08, 0.707106, -0.707106, 0, 0.707106, 0.707106, 1, 3.09086e-08, -3.09086e-08, -26.657, 23.188, 50 ) current = true script = ExtResource( 5 ) @@ -59,7 +62,6 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.172523, 0.157974, 349.242 ) shape = SubResource( 8 ) [node name="Timer" type="Timer" parent="."] -wait_time = 60.0 one_shot = true autostart = true @@ -209,6 +211,12 @@ transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 15.0132, 0, 664.688 ) [node name="spawn_location42" type="Position3D" parent="spawn locations" groups=["rock_spawn_location"]] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 17.4828, 0, 603.399 ) +[node name="DirectionalLight" type="DirectionalLight" parent="."] +transform = Transform( 0.866025, 2.18557e-08, -0.5, 0.5, -3.78552e-08, 0.866025, 0, -1, -4.37114e-08, 0, 87.952, 53 ) +shadow_enabled = true + [connection signal="area_entered" from="collection_area" to="." method="_on_collection_area_area_entered"] +[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"] [editable path="RoverGame"] +[editable path="rover"] diff --git a/scenes/rover_station.tscn b/scenes/rover_station.tscn new file mode 100644 index 0000000..d19324a --- /dev/null +++ b/scenes/rover_station.tscn @@ -0,0 +1,53 @@ +[gd_scene load_steps=7 format=2] + +[ext_resource path="res://scenes/status_light.tscn" type="PackedScene" id=1] +[ext_resource path="res://scenes/item_holder.tscn" type="PackedScene" id=2] +[ext_resource path="res://scenes/coin_machine.tscn" type="PackedScene" id=3] +[ext_resource path="res://scenes/item_dump.tscn" type="PackedScene" id=4] +[ext_resource path="res://scripts/rover_station/rover_station.gd" type="Script" id=6] +[ext_resource path="res://item_types/repair_kit.tres" type="Resource" id=11] + +[node name="rover_station" type="Spatial" groups=["on_player_sleep_listener"]] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0.173937, 0, -3.56739 ) +script = ExtResource( 6 ) + +[node name="status_light" parent="." instance=ExtResource( 1 )] +transform = Transform( 0.999404, 0, 0.0345158, 0, 1, 0, -0.0345158, 0, 0.999404, 0.0140028, -0.0739165, 1.81011 ) +omni_range = 2.3706 + +[node name="coin_machine" parent="." instance=ExtResource( 3 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.02357, 0.126143 ) + +[node name="item_holder" parent="." instance=ExtResource( 2 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 2.26269, 0.778543, -0.31761 ) + +[node name="item_dump" parent="." instance=ExtResource( 4 )] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 9.53674e-07, 0.993049, 0.0943546 ) +item_type_0 = ExtResource( 11 ) +item_count_0 = 1 + +[node name="game_canvas" type="CanvasLayer" parent="."] +layer = 0 +visible = false + +[node name="ViewportContainer" type="ViewportContainer" parent="game_canvas"] +anchor_right = 1.0 +anchor_bottom = 1.0 +stretch = true + +[node name="rover_game_viewport" type="Viewport" parent="game_canvas/ViewportContainer"] +unique_name_in_owner = true +size = Vector2( 1920, 1080 ) +own_world = true +handle_input_locally = false +msaa = 1 +render_target_update_mode = 0 +shadow_atlas_size = 4096 + +[node name="rover_game" parent="game_canvas/ViewportContainer/rover_game_viewport" instance_placeholder="res://scenes/rover_game.tscn"] +unique_name_in_owner = true +play_time = 40.0 + +[connection signal="coin_requirement_met" from="coin_machine" to="." method="_on_coin_machine_coin_requirement_met"] +[connection signal="item_changed" from="item_holder" to="." method="_on_item_holder_item_changed"] +[connection signal="item_dump_completed" from="item_dump" to="." method="_on_item_dump_completed"] diff --git a/scripts/Beetle IX.gd b/scripts/Beetle IX.gd new file mode 100644 index 0000000..2182e41 --- /dev/null +++ b/scripts/Beetle IX.gd @@ -0,0 +1,9 @@ +extends Spatial + +onready var playback = $AnimationTree["parameters/playback"] + +func idle(): + playback.travel("idle") + +func drive(): + playback.travel("driving") diff --git a/scripts/Interface.gd b/scripts/Interface.gd new file mode 100644 index 0000000..655aa76 --- /dev/null +++ b/scripts/Interface.gd @@ -0,0 +1,40 @@ +extends Resource +class_name Interface + +export(Array, String) var method_names + +func assert_implemented_by(script): + if !(script is Script): + script = script.get_script() + var methods = {} + for method in script.get_script_method_list(): + methods[method.name] = method + + for method_name in method_names: + assert(methods.has(method_name), "`%s` does not implement `%s` from interface `%s`" % [script.resource_path, method_name, resource_path]) + +static func check_script(path: String): + var script: Script = load(path) + var interfaces = script.get("INTERFACES") + if interfaces == null: + return + for interface in interfaces: + interface.assert_implemented_by(script) + +static func check_all_scripts(path: String): + if not OS.is_debug_build(): + return + var dir = Directory.new() + if dir.open(path) == OK: + dir.list_dir_begin() + var file_name = dir.get_next() + while file_name != "": + if dir.current_is_dir(): + if not file_name.begins_with("."): + check_all_scripts(path + "/" + file_name) + else: + if file_name.ends_with(".gd"): + check_script(path + "/" + file_name) + file_name = dir.get_next() + else: + print("An error occurred when trying to access the path.") diff --git a/scripts/Level.gd b/scripts/Level.gd new file mode 100644 index 0000000..d612f53 --- /dev/null +++ b/scripts/Level.gd @@ -0,0 +1,11 @@ +extends Spatial + + +func _ready(): + pass + +func start_drill(): + $AnimationPlayer.play("Excavator Running-loop") + +func stop_drill(): + $AnimationPlayer.play("Excavator Reset") diff --git a/scripts/interface_checker.gd b/scripts/interface_checker.gd new file mode 100644 index 0000000..742c849 --- /dev/null +++ b/scripts/interface_checker.gd @@ -0,0 +1,4 @@ +extends Node + +func _init(): + Interface.check_all_scripts("res://scripts") diff --git a/scripts/player/player.gd b/scripts/player/player.gd index 5d5a4b6..359eabb 100644 --- a/scripts/player/player.gd +++ b/scripts/player/player.gd @@ -5,6 +5,7 @@ signal starved_to_death const StateDefault = preload("res://scripts/player/state/default.gd") const StateInteracting = preload("res://scripts/player/state/interacting.gd") const StateSleeping = preload("res://scripts/player/state/sleeping.gd") +const StatePlayingRoverGame = preload("res://scripts/player/state/playing_rover_game.gd") const SPEED = 10.0 const MAX_HEALTH = 4 @@ -133,3 +134,8 @@ func _on_blink_timer_timeout(): func sleep(made_it_to_bed: bool, hop_position: Spatial): state.on_sleep(made_it_to_bed, hop_position) +func start_playing_rover_game(): + state.on_start_playing_rover_game() + +func stop_playing_rover_game(): + state.on_stop_playing_rover_game() diff --git a/scripts/player/state/default.gd b/scripts/player/state/default.gd index 8bf45f6..37be38b 100644 --- a/scripts/player/state/default.gd +++ b/scripts/player/state/default.gd @@ -1,5 +1,6 @@ extends Reference +const INTERFACES = [preload("res://scripts/player/state/state_interface.tres")] const NAME = "default" const EPSILON = 0.0001 @@ -7,9 +8,6 @@ var ctx = null var anim_tree: AnimationTree var move_playback -func _init(): - pass - func enter_from(state): anim_tree = ctx.get_node("model_transform/DungMan/AnimationTree") move_playback = anim_tree["parameters/Move/playback"] @@ -34,3 +32,10 @@ func unhandled_input(event): func on_sleep(made_it_to_bed: bool, hop_position: Spatial): ctx.change_state(ctx.StateSleeping.new(made_it_to_bed, hop_position)) + +func on_start_playing_rover_game(): + ctx.change_state(ctx.StatePlayingRoverGame.new()) + +func on_stop_playing_rover_game(): + assert(false, "invalid state") + diff --git a/scripts/player/state/interacting.gd b/scripts/player/state/interacting.gd index 0772718..787f38e 100644 --- a/scripts/player/state/interacting.gd +++ b/scripts/player/state/interacting.gd @@ -1,5 +1,6 @@ extends Reference +const INTERFACES = [preload("res://scripts/player/state/state_interface.tres")] const NAME = "interacting" var ctx: KinematicBody = null @@ -17,7 +18,8 @@ func enter_from(state): timer.connect("timeout", self, "_on_timeout", [], CONNECT_ONESHOT) func exit_to(state): - pass + if timer.is_connected("timeout", self, "_on_timeout"): + timer.disconnect("timeout", self, "_on_timeout") func physics_process(delta): pass @@ -50,5 +52,10 @@ func try_trigger_interact(area) -> bool: return true func on_sleep(made_it_to_bed: bool, hop_position: Spatial): - timer.disconnect("timeout", self, "_on_timeout") ctx.change_state(ctx.StateSleeping.new(made_it_to_bed, hop_position)) + +func on_start_playing_rover_game(): + ctx.change_state(ctx.StatePlayingRoverGame.new()) + +func on_stop_playing_rover_game(): + assert(false, "invalid state") diff --git a/scripts/player/state/playing_rover_game.gd b/scripts/player/state/playing_rover_game.gd new file mode 100644 index 0000000..6298c8f --- /dev/null +++ b/scripts/player/state/playing_rover_game.gd @@ -0,0 +1,29 @@ +extends Reference + +const INTERFACES = [preload("res://scripts/player/state/state_interface.tres")] +const NAME = "playing_rover_game" + +var ctx: KinematicBody = null + +func enter_from(state): + var anim_tree: AnimationTree = ctx.get_node("model_transform/DungMan/AnimationTree") + var move_playback: AnimationNodeStateMachinePlayback = anim_tree["parameters/Move/playback"] + move_playback.travel("idle") + +func exit_to(state): + pass + +func physics_process(delta): + pass + +func unhandled_input(event: InputEvent): + pass + +func on_sleep(made_it_to_bed: bool, hop_position: Spatial): + ctx.change_state(ctx.StateSleeping.new(made_it_to_bed, hop_position)) + +func on_start_playing_rover_game(): + assert(false, "invalid state") + +func on_stop_playing_rover_game(): + ctx.change_state(ctx.StateDefault.new()) diff --git a/scripts/player/state/sleeping.gd b/scripts/player/state/sleeping.gd index d93ecdb..0ddd7f2 100644 --- a/scripts/player/state/sleeping.gd +++ b/scripts/player/state/sleeping.gd @@ -1,5 +1,6 @@ extends Reference +const INTERFACES = [preload("res://scripts/player/state/state_interface.tres")] const NAME = "sleeping" var ctx: KinematicBody = null @@ -16,6 +17,7 @@ func _init(p_made_it_to_bed: bool, p_hop_position: Spatial = null): made_it_to_bed = p_made_it_to_bed func enter_from(state): + ctx.get_tree().call_group("on_player_sleep_listener", "on_player_sleep") hop_position = hop_position if hop_position else ctx.get_tree().get_nodes_in_group("bed_hop_position")[0] model_transform = ctx.get_node("model_transform") anim_player = ctx.get_node("model_transform/node_animations") @@ -97,3 +99,9 @@ func unhandled_input(event: InputEvent): func on_sleep(made_it_to_bed: bool, hop_position: Spatial): assert(false, "shouldn't be able to sleep while sleeping") + +func on_start_playing_rover_game(): + assert(false, "invalid state") + +func on_stop_playing_rover_game(): + pass diff --git a/scripts/player/state/state_interface.tres b/scripts/player/state/state_interface.tres new file mode 100644 index 0000000..0d264cb --- /dev/null +++ b/scripts/player/state/state_interface.tres @@ -0,0 +1,7 @@ +[gd_resource type="Resource" load_steps=2 format=2] + +[ext_resource path="res://scripts/Interface.gd" type="Script" id=1] + +[resource] +script = ExtResource( 1 ) +method_names = [ "enter_from", "exit_to", "physics_process", "unhandled_input", "on_sleep", "on_start_playing_rover_game", "on_stop_playing_rover_game" ] diff --git a/scripts/rock.gd b/scripts/rock.gd index 995efda..4c217fd 100644 --- a/scripts/rock.gd +++ b/scripts/rock.gd @@ -1,5 +1,6 @@ extends RigidBody +export var treasure: Resource func _ready(): $hit_box.set_meta("owner", self) diff --git a/scripts/rover.gd b/scripts/rover.gd index bd32f48..66a5c8c 100644 --- a/scripts/rover.gd +++ b/scripts/rover.gd @@ -1,11 +1,17 @@ extends RigidBody +const EPSILON = 0.0001 const SPEED = 300.0 const TURN = 2.5 -var heading := Vector3.FORWARD +var heading := Vector3.BACK func _physics_process(delta): - heading = heading.rotated(Vector3.UP, Input.get_axis("right", "left") * TURN * delta).normalized() + var input = Vector3(Input.get_axis("right", "left"), 0.0, Input.get_axis("down", "up")) + if input.length_squared() > EPSILON: + $visual/BeetleIX.drive() + else: + $visual/BeetleIX.idle() + heading = heading.rotated(Vector3.UP, input.x * TURN * delta).normalized() $visual.global_transform = $visual.global_transform.looking_at($visual.global_transform.origin + heading, Vector3.UP) func _integrate_forces(state): diff --git a/scripts/rover_game.gd b/scripts/rover_game.gd index cfb0d92..67ae656 100644 --- a/scripts/rover_game.gd +++ b/scripts/rover_game.gd @@ -1,6 +1,19 @@ extends Spatial +signal game_over +signal got_treasure(item_type) + +export var play_time: float = 20.0 + +const loot_table = { + #preload("res://") +} + +var main: Node +var treasure := [] # is array of item_types + func _ready(): + $Timer.start(play_time) spawn_rocks(10) func spawn_rocks(count: int): @@ -10,12 +23,17 @@ func spawn_rocks(count: int): var location = locations[i] var rock = preload("res://scenes/rock.tscn").instance() location.add_child(rock) - func _on_collection_area_area_entered(area): if area.has_meta("owner"): area = area.get_meta("owner") area.queue_free() + emit_signal("got_treasure", preload("res://item_types/ore.tres")) func _process(delta): $"%progress_bar".value = $Timer.time_left * 100.0 / $Timer.wait_time + +func _on_Timer_timeout(): + emit_signal("game_over") + + diff --git a/scripts/rover_station/rover_station.gd b/scripts/rover_station/rover_station.gd new file mode 100644 index 0000000..2ae6d23 --- /dev/null +++ b/scripts/rover_station/rover_station.gd @@ -0,0 +1,41 @@ +extends Damageable + +const StateIdle = preload("res://scripts/rover_station/state/idle.gd") +const StateBroken = preload("res://scripts/rover_station/state/broken.gd") +const StatePlaying = preload("res://scripts/rover_station/state/playing.gd") + +var state = null +var treasure := [] # array of ItemTypes + +func _ready(): + state = StateBroken.new() if start_broken else StateIdle.new() + state.ctx = self + state.enter_from(null) + print("rover_station: NULL -> ", state.NAME) + +func change_state(new_state): + print("rover_station: ", state.NAME, " -> ", new_state.NAME) + new_state.ctx = self + state.exit_to(new_state) + new_state.enter_from(state) + state = new_state + +func _on_coin_machine_coin_requirement_met(player): + state.on_coin_machine_coin_requirement_met(player) + +func _on_item_dump_completed(): + state.on_item_dump_completed() + +func on_player_sleep(): + state.on_player_sleep() + +func add_treasure(item_type: Resource): + if $item_holder.item_in_hold == null: + $item_holder.add_item(item_type.spawn_node()) + else: + treasure.push_back(item_type) + +func _on_item_holder_item_changed(item): + if item == null and not treasure.empty(): + $item_holder.add_item(treasure.pop_front().spawn_node()) + diff --git a/scripts/rover_station/state/broken.gd b/scripts/rover_station/state/broken.gd new file mode 100644 index 0000000..e4f31ce --- /dev/null +++ b/scripts/rover_station/state/broken.gd @@ -0,0 +1,33 @@ +extends Reference + +const INTERFACES = [preload("res://scripts/rover_station/state/state_interface.tres")] +const NAME = "broken" + +var ctx = null + +func _init(): + pass + +func enter_from(state): + ctx.get_node("item_dump").enabled = true + ctx.get_node("item_dump").reset() + ctx.get_node("coin_machine").enabled = false + ctx.get_node("item_holder").add_enabled = true + ctx.get_node("item_holder").remove_enabled = true + ctx.get_node("status_light").fail() + +func exit_to(state): + assert(state.NAME != "broken") + +func on_coin_machine_coin_requirement_met(player): + assert(false, "should be impossible while broken") + +func on_item_dump_completed(): + ctx.full_heal() + ctx.change_state(ctx.StateIdle.new()) + +func on_damage_taken(): + assert(false, "should be impossible while broken") + +func on_player_sleep(): + ctx.treasure.clear() diff --git a/scripts/rover_station/state/idle.gd b/scripts/rover_station/state/idle.gd new file mode 100644 index 0000000..09f5af9 --- /dev/null +++ b/scripts/rover_station/state/idle.gd @@ -0,0 +1,32 @@ +extends Reference + +const INTERFACES = [preload("res://scripts/rover_station/state/state_interface.tres")] +const NAME = "idle" + +var ctx = null + +func _init(): + pass + +func enter_from(state): + ctx.get_node("item_dump").enabled = false + ctx.get_node("coin_machine").enabled = true + ctx.get_node("item_holder").add_enabled = true + ctx.get_node("item_holder").remove_enabled = true + ctx.get_node("status_light").idle() + +func exit_to(state): + pass + +func on_coin_machine_coin_requirement_met(player): + ctx.change_state(ctx.StatePlaying.new(player)) + +func on_item_dump_completed(): + assert(false, "item dump should be disabled") + +func on_damage_taken(): + if ctx.hp <= 0: + ctx.change_state(ctx.StateBroken.new()) + +func on_player_sleep(): + ctx.treasure.clear() diff --git a/scripts/rover_station/state/playing.gd b/scripts/rover_station/state/playing.gd new file mode 100644 index 0000000..ab64f10 --- /dev/null +++ b/scripts/rover_station/state/playing.gd @@ -0,0 +1,52 @@ +extends Reference + +const INTERFACES = [preload("res://scripts/rover_station/state/state_interface.tres")] +const NAME = "playing" + +var ctx: Spatial = null +var game: Node +var player: Node + +func _init(p_player: Node): + player = p_player + +func enter_from(state): + ctx.get_node("item_dump").enabled = false + ctx.get_node("coin_machine").enabled = false + ctx.get_node("item_holder").add_enabled = false + ctx.get_node("item_holder").remove_enabled = false + ctx.get_node("status_light").activate() + # START THE GAME + game = ctx.get_node("%rover_game").create_instance() + game.connect("got_treasure", self, "on_got_treasure") + game.connect("game_over", self, "on_game_over") + ctx.get_node("game_canvas").visible = true + player.start_playing_rover_game() + +func exit_to(state): + # END THE GAME + player.stop_playing_rover_game() + ctx.get_node("game_canvas").visible = false + if game: + game.queue_free() + game = null + +func on_coin_machine_coin_requirement_met(player): + assert(false, "coin machine should be disabled while playing") + +func on_item_dump_completed(): + assert(false, "item dump should be disabled while playing") + +func on_damage_taken(): + if ctx.hp <= 0: + ctx.change_state(ctx.StateBroken.new()) + +func on_got_treasure(treasure: Resource): + ctx.add_treasure(treasure) + +func on_game_over(): + ctx.change_state(ctx.StateIdle.new()) + +func on_player_sleep(): + ctx.treasure.clear() + ctx.change_state(ctx.StateIdle.new()) diff --git a/scripts/rover_station/state/state_interface.tres b/scripts/rover_station/state/state_interface.tres new file mode 100644 index 0000000..5b29a88 --- /dev/null +++ b/scripts/rover_station/state/state_interface.tres @@ -0,0 +1,7 @@ +[gd_resource type="Resource" load_steps=2 format=2] + +[ext_resource path="res://scripts/Interface.gd" type="Script" id=1] + +[resource] +script = ExtResource( 1 ) +method_names = [ "enter_from", "exit_to", "on_coin_machine_coin_requirement_met", "on_item_dump_completed", "on_player_sleep" ]