From: Clifton Palmer Date: Sun, 27 Oct 2024 12:47:47 +0000 (+0200) Subject: Added test world, player, and mushroom X-Git-Url: http://git.purplebirdman.com/mushroom-game.git/commitdiff_plain/5a21298c3ff31c639d9bb73c45e138441359e889 Added test world, player, and mushroom --- diff --git a/.gitignore b/.gitignore index 0af181c..f25660f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ # Godot 4+ specific ignores .godot/ /android/ + +# blender +*.blend1 diff --git a/mushroom/model/golden-chanterelle.blend b/mushroom/model/golden-chanterelle.blend new file mode 100644 index 0000000..a5e3436 Binary files /dev/null and b/mushroom/model/golden-chanterelle.blend differ diff --git a/mushroom/model/golden-chanterelle.glb b/mushroom/model/golden-chanterelle.glb new file mode 100644 index 0000000..a3a0ba8 Binary files /dev/null and b/mushroom/model/golden-chanterelle.glb differ diff --git a/mushroom/model/golden-chanterelle.glb.import b/mushroom/model/golden-chanterelle.glb.import new file mode 100644 index 0000000..00e9ce5 --- /dev/null +++ b/mushroom/model/golden-chanterelle.glb.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://b1kwwyctl2bug" +path="res://.godot/imported/golden-chanterelle.glb-0b1a4a6e99402837f15909fdcbbaa1cc.scn" + +[deps] + +source_file="res://mushroom/model/golden-chanterelle.glb" +dest_files=["res://.godot/imported/golden-chanterelle.glb-0b1a4a6e99402837f15909fdcbbaa1cc.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/mushroom/mushroom.gd b/mushroom/mushroom.gd new file mode 100644 index 0000000..a0100a2 --- /dev/null +++ b/mushroom/mushroom.gd @@ -0,0 +1,21 @@ +extends Node3D + +signal picked + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(_delta: float) -> void: + pass + + +func _on_area_3d_area_entered(area: Area3D) -> void: + if(area.is_in_group("player")): + print("Player picked a mushroom!") + hide() + picked.emit() + $Area3D/CollisionShape3D.set_deferred("disabled", true) diff --git a/mushroom/mushroom.tscn b/mushroom/mushroom.tscn new file mode 100644 index 0000000..a196a88 --- /dev/null +++ b/mushroom/mushroom.tscn @@ -0,0 +1,20 @@ +[gd_scene load_steps=4 format=3 uid="uid://csuyt22r71oxl"] + +[ext_resource type="PackedScene" uid="uid://b1kwwyctl2bug" path="res://mushroom/model/golden-chanterelle.glb" id="1_abaxu"] +[ext_resource type="Script" path="res://mushroom/mushroom.gd" id="1_blb61"] + +[sub_resource type="SphereShape3D" id="SphereShape3D_5dm4s"] +radius = 0.191568 + +[node name="mushroom" type="Node3D"] +script = ExtResource("1_blb61") + +[node name="golden-chanterelle" parent="." instance=ExtResource("1_abaxu")] + +[node name="Area3D" type="Area3D" parent="." groups=["pickable"]] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.120821, 0) +shape = SubResource("SphereShape3D_5dm4s") + +[connection signal="area_entered" from="Area3D" to="." method="_on_area_3d_area_entered"] diff --git a/player/model/player.blend b/player/model/player.blend new file mode 100644 index 0000000..d81544f Binary files /dev/null and b/player/model/player.blend differ diff --git a/player/model/player.glb b/player/model/player.glb new file mode 100644 index 0000000..f497a6a Binary files /dev/null and b/player/model/player.glb differ diff --git a/player/model/player.glb.import b/player/model/player.glb.import new file mode 100644 index 0000000..c7a9423 --- /dev/null +++ b/player/model/player.glb.import @@ -0,0 +1,36 @@ +[remap] + +importer="scene" +importer_version=1 +type="PackedScene" +uid="uid://cu45deogn0ahs" +path="res://.godot/imported/player.glb-4fab3988dc7fd5b74f5ba5057da16803.scn" + +[deps] + +source_file="res://player/model/player.glb" +dest_files=["res://.godot/imported/player.glb-4fab3988dc7fd5b74f5ba5057da16803.scn"] + +[params] + +nodes/root_type="" +nodes/root_name="" +nodes/apply_root_scale=true +nodes/root_scale=1.0 +nodes/import_as_skeleton_bones=false +meshes/ensure_tangents=true +meshes/generate_lods=true +meshes/create_shadow_meshes=true +meshes/light_baking=1 +meshes/lightmap_texel_size=0.2 +meshes/force_disable_compression=false +skins/use_named_skins=true +animation/import=true +animation/fps=30 +animation/trimming=false +animation/remove_immutable_tracks=true +animation/import_rest_as_RESET=false +import_script/path="" +_subresources={} +gltf/naming_version=1 +gltf/embedded_image_handling=1 diff --git a/player/player.gd b/player/player.gd new file mode 100644 index 0000000..fdaf988 --- /dev/null +++ b/player/player.gd @@ -0,0 +1,36 @@ +extends CharacterBody3D + + +const SPEED = 5.0 +const CAMERA_ROTATE_RATE = PI / 12 + + +# rotate camera +func _unhandled_input(event: InputEvent) -> void: + if event.is_action("camera-rotate-left"): + $cameraPivot.rotate_y(CAMERA_ROTATE_RATE) + elif event.is_action("camera-rotate-right"): + $cameraPivot.rotate_y(-CAMERA_ROTATE_RATE) + + +func _physics_process(delta: float) -> void: + # Add the gravity. + if not is_on_floor(): + velocity += get_gravity() * delta + + # Get the input direction and handle the movement/deceleration. + var input_dir := Input.get_vector("player-turn-left", "player-turn-right", "player-forward", "player-backward") + var direction := (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized() + direction = direction.rotated(Vector3.UP, $cameraPivot.rotation.y) + + if direction: + velocity.x = direction.x * SPEED + velocity.z = direction.z * SPEED + + # rotate the character to face movement direction + $player.rotation.y = lerp_angle($player.rotation.y, atan2(-velocity.x, -velocity.z), 0.15) + else: + velocity.x = move_toward(velocity.x, 0, SPEED) + velocity.z = move_toward(velocity.z, 0, SPEED) + + move_and_slide() diff --git a/player/player.tscn b/player/player.tscn new file mode 100644 index 0000000..a10014c --- /dev/null +++ b/player/player.tscn @@ -0,0 +1,33 @@ +[gd_scene load_steps=5 format=3 uid="uid://8acx55kbkhkg"] + +[ext_resource type="Script" path="res://player/player.gd" id="1_wm6ep"] +[ext_resource type="PackedScene" uid="uid://cu45deogn0ahs" path="res://player/model/player.glb" id="1_y543y"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_53x73"] + +[sub_resource type="SphereShape3D" id="SphereShape3D_evp18"] + +[node name="player" type="CharacterBody3D"] +script = ExtResource("1_wm6ep") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0) +shape = SubResource("CapsuleShape3D_53x73") + +[node name="player" parent="." instance=ExtResource("1_y543y")] + +[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 + +[node name="Camera3D" type="Camera3D" parent="cameraPivot/SpringArm3D"] + +[node name="Area3D" type="Area3D" parent="." groups=["player"]] + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.337483, 0) +shape = SubResource("SphereShape3D_evp18") + +[connection signal="area_entered" from="Area3D" to="." method="_on_area_3d_area_entered"] diff --git a/project.godot b/project.godot index 1690807..9624c60 100644 --- a/project.godot +++ b/project.godot @@ -11,5 +11,53 @@ config_version=5 [application] config/name="mushroom-hunting" +run/main_scene="res://world.tscn" config/features=PackedStringArray("4.3", "Forward Plus") config/icon="res://icon.svg" + +[filesystem] + +import/blender/enabled=false + +[global_group] + +pickable="" +player="" + +[input] + +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) +] +} +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) +] +} +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) +] +} +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) +] +} +quit-game={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194305,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +camera-rotate-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":4194319,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} +camera-rotate-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":4194321,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) +] +} diff --git a/world.gd b/world.gd new file mode 100644 index 0000000..07e281d --- /dev/null +++ b/world.gd @@ -0,0 +1,24 @@ +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() + + +# Called when the node enters the scene tree for the first time. +func _ready() -> void: + pass # Replace with function body. + + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(_delta: float) -> void: + pass + + +func _on_mushroom_picked() -> void: + print("Player picked all mushrooms!") + #quit_game() diff --git a/world.tscn b/world.tscn new file mode 100644 index 0000000..d6d9396 --- /dev/null +++ b/world.tscn @@ -0,0 +1,51 @@ +[gd_scene load_steps=9 format=3 uid="uid://k0t26148qmto"] + +[ext_resource type="Script" path="res://world.gd" id="1_0q4eg"] +[ext_resource type="PackedScene" uid="uid://8acx55kbkhkg" path="res://player/player.tscn" id="2_i1nnw"] +[ext_resource type="PackedScene" uid="uid://csuyt22r71oxl" path="res://mushroom/mushroom.tscn" id="3_cq28e"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_ou57n"] +sky_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) +sky_energy_multiplier = 0.3 +ground_horizon_color = Color(0.64625, 0.65575, 0.67075, 1) + +[sub_resource type="Sky" id="Sky_ec1ai"] +sky_material = SubResource("ProceduralSkyMaterial_ou57n") + +[sub_resource type="Environment" id="Environment_dvway"] +background_mode = 2 +sky = SubResource("Sky_ec1ai") +tonemap_mode = 2 +glow_enabled = true + +[sub_resource type="PlaneMesh" id="PlaneMesh_p1m44"] +size = Vector2(20, 20) + +[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_tjuji"] +data = PackedVector3Array(10, 0, 10, -10, 0, 10, 10, 0, -10, -10, 0, 10, -10, 0, -10, 10, 0, -10) + +[node name="World" type="Node3D"] +script = ExtResource("1_0q4eg") + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +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) +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")] +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"]