From: Clifton Palmer Date: Sat, 14 Dec 2024 10:10:15 +0000 (+0200) Subject: Squashed commit of the following: X-Git-Url: http://git.purplebirdman.com/mushroom-game.git/commitdiff_plain/9705fff8daeb0d6a332df2e46cfa4e906e1b292c?hp=5a21298c3ff31c639d9bb73c45e138441359e889 Squashed commit of the following: * Added victory screen * Handling victory and quit conditions with signals now * Added mushroom tracking * Changed camera behavior * Changed display size * Player and mushroom glow --- diff --git a/mushroom/model/golden-chanterelle.blend b/mushroom/model/golden-chanterelle.blend index a5e3436..e866556 100644 Binary files a/mushroom/model/golden-chanterelle.blend and b/mushroom/model/golden-chanterelle.blend differ diff --git a/mushroom/model/golden-chanterelle.glb b/mushroom/model/golden-chanterelle.glb index a3a0ba8..d05f2a7 100644 Binary files a/mushroom/model/golden-chanterelle.glb and b/mushroom/model/golden-chanterelle.glb differ diff --git a/mushroom/mushroom.gd b/mushroom/mushroom.gd index a0100a2..f62fb8c 100644 --- a/mushroom/mushroom.gd +++ b/mushroom/mushroom.gd @@ -1,6 +1,8 @@ extends Node3D + signal picked +var is_picked := false # Called when the node enters the scene tree for the first time. @@ -15,7 +17,10 @@ func _process(_delta: float) -> void: func _on_area_3d_area_entered(area: Area3D) -> void: if(area.is_in_group("player")): - print("Player picked a mushroom!") + # make this instance vanish hide() - picked.emit() $Area3D/CollisionShape3D.set_deferred("disabled", true) + is_picked = true + + # emit "picked" signal + picked.emit() diff --git a/player/model/player.blend b/player/model/player.blend index d81544f..9711721 100644 Binary files a/player/model/player.blend and b/player/model/player.blend differ diff --git a/player/model/player.glb b/player/model/player.glb index f497a6a..a9d54bc 100644 Binary files a/player/model/player.glb and b/player/model/player.glb differ diff --git a/player/player.gd b/player/player.gd index fdaf988..21a930b 100644 --- a/player/player.gd +++ b/player/player.gd @@ -2,14 +2,14 @@ extends CharacterBody3D const SPEED = 5.0 -const CAMERA_ROTATE_RATE = PI / 12 +const CAMERA_ROTATE_RATE = PI / 6 # rotate camera func _unhandled_input(event: InputEvent) -> void: - if event.is_action("camera-rotate-left"): + if event.is_action_pressed("camera-rotate-left"): $cameraPivot.rotate_y(CAMERA_ROTATE_RATE) - elif event.is_action("camera-rotate-right"): + elif event.is_action_pressed("camera-rotate-right"): $cameraPivot.rotate_y(-CAMERA_ROTATE_RATE) diff --git a/player/player.tscn b/player/player.tscn index a10014c..4483e44 100644 --- a/player/player.tscn +++ b/player/player.tscn @@ -19,8 +19,8 @@ shape = SubResource("CapsuleShape3D_53x73") [node name="cameraPivot" type="Node3D" parent="."] [node name="SpringArm3D" type="SpringArm3D" parent="cameraPivot"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) -spring_length = 3.0 +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4, 0) +spring_length = 10.0 [node name="Camera3D" type="Camera3D" parent="cameraPivot/SpringArm3D"] diff --git a/project.godot b/project.godot index 9624c60..f0cb588 100644 --- a/project.godot +++ b/project.godot @@ -10,11 +10,16 @@ config_version=5 [application] -config/name="mushroom-hunting" +config/name="Mushroom Hunting" run/main_scene="res://world.tscn" config/features=PackedStringArray("4.3", "Forward Plus") config/icon="res://icon.svg" +[display] + +window/size/viewport_width=2880 +window/size/viewport_height=1620 + [filesystem] import/blender/enabled=false @@ -28,22 +33,22 @@ player="" player-forward={ "deadzone": 0.5, -"events": [null, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +"events": [null, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":69,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null) ] } player-backward={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) ] } player-turn-left={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null) ] } player-turn-right={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":70,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null) ] } quit-game={ diff --git a/victory-screen.tscn b/victory-screen.tscn new file mode 100644 index 0000000..6003247 --- /dev/null +++ b/victory-screen.tscn @@ -0,0 +1,31 @@ +[gd_scene load_steps=3 format=3 uid="uid://4137e77qcp8n"] + +[ext_resource type="Script" path="res://victory_screen.gd" id="1_fj101"] + +[sub_resource type="LabelSettings" id="LabelSettings_to6tr"] +font_size = 72 +font_color = Color(0.885467, 0.881632, 0, 1) +outline_size = 20 +outline_color = Color(0.133196, 0.133196, 0.133196, 1) + +[node name="victory-screen" type="Node2D"] +script = ExtResource("1_fj101") + +[node name="CenterContainer" type="CenterContainer" parent="."] +offset_right = 2880.0 +offset_bottom = 1624.0 + +[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="CenterContainer/VBoxContainer"] +layout_mode = 2 +text = "big win" +label_settings = SubResource("LabelSettings_to6tr") +horizontal_alignment = 1 + +[node name="Button" type="Button" parent="CenterContainer/VBoxContainer"] +layout_mode = 2 +text = "restart the fun" + +[connection signal="pressed" from="CenterContainer/VBoxContainer/Button" to="." method="_on_button_pressed"] diff --git a/victory_screen.gd b/victory_screen.gd new file mode 100644 index 0000000..ceb887b --- /dev/null +++ b/victory_screen.gd @@ -0,0 +1,5 @@ +extends Node2D + + +func _on_button_pressed() -> void: + get_tree().change_scene_to_file("res://world.tscn") diff --git a/world.gd b/world.gd index 07e281d..91b1bc6 100644 --- a/world.gd +++ b/world.gd @@ -1,12 +1,7 @@ extends Node3D -func quit_game() -> void: - get_tree().quit() - -# Quit the game -func _unhandled_input(event: InputEvent) -> void: - if event.is_action_pressed("quit-game"): - quit_game() +signal victory +signal quit # Called when the node enters the scene tree for the first time. @@ -19,6 +14,28 @@ func _process(_delta: float) -> void: pass +# Quit the game on user action +func _unhandled_input(event: InputEvent) -> void: + if event.is_action_pressed("quit-game"): + quit.emit() + + +# if all mushrooms have been picked, +# then game is over func _on_mushroom_picked() -> void: - print("Player picked all mushrooms!") - #quit_game() + print("Player picked a mushroom!") + + for mushroom in $mushrooms.get_children(): + if mushroom.is_picked == false: + return + + print("Player picked all mushrooms, game over") + victory.emit() + + +func _on_victory() -> void: + get_tree().change_scene_to_file("res://victory-screen.tscn") + + +func _on_quit() -> void: + get_tree().quit() diff --git a/world.tscn b/world.tscn index d6d9396..ff2d3dd 100644 --- a/world.tscn +++ b/world.tscn @@ -32,20 +32,36 @@ environment = SubResource("Environment_dvway") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] transform = Transform3D(-0.866023, -0.433016, 0.250001, 0, 0.499998, 0.866027, -0.500003, 0.749999, -0.43301, 0, 0, 0) +light_energy = 0.335 shadow_enabled = true -[node name="ground" type="MeshInstance3D" parent="."] -mesh = SubResource("PlaneMesh_p1m44") - -[node name="StaticBody3D" type="StaticBody3D" parent="ground"] - -[node name="CollisionShape3D" type="CollisionShape3D" parent="ground/StaticBody3D"] -shape = SubResource("ConcavePolygonShape3D_tjuji") - [node name="player" parent="." instance=ExtResource("2_i1nnw")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 7.20149) -[node name="mushroom" parent="." instance=ExtResource("3_cq28e")] +[node name="mushrooms" type="Node" parent="."] + +[node name="mushroom" parent="mushrooms" instance=ExtResource("3_cq28e")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.09446, -4.76837e-07, -4.56699) -[connection signal="picked" from="mushroom" to="." method="_on_mushroom_picked"] +[node name="mushroom2" parent="mushrooms" instance=ExtResource("3_cq28e")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.26121, 0, 4.04727) + +[node name="mushroom3" parent="mushrooms" instance=ExtResource("3_cq28e")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.74696, 0, -5.19882) + +[node name="ground" type="Node3D" parent="."] + +[node name="test" type="MeshInstance3D" parent="ground"] +mesh = SubResource("PlaneMesh_p1m44") +skeleton = NodePath("../..") + +[node name="StaticBody3D" type="StaticBody3D" parent="ground/test"] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="ground/test/StaticBody3D"] +shape = SubResource("ConcavePolygonShape3D_tjuji") + +[connection signal="quit" from="." to="." method="_on_quit"] +[connection signal="victory" from="." to="." method="_on_victory"] +[connection signal="picked" from="mushrooms/mushroom" to="." method="_on_mushroom_picked"] +[connection signal="picked" from="mushrooms/mushroom2" to="." method="_on_mushroom_picked"] +[connection signal="picked" from="mushrooms/mushroom3" to="." method="_on_mushroom_picked"]