From b5dcad5614fe9fee35889a6a705144f3cadc1c05 Mon Sep 17 00:00:00 2001 From: kziolkowski Date: Wed, 9 Apr 2025 18:14:05 +0200 Subject: [PATCH] Vesna walking and idle animations work for all movement directions. --- .idea/.idea.Babushka/.idea/.name | 1 - .../3d/best_house_blender.blend.import | 3 +- prefabs/UI/Inventory/Inventory.tscn | 3 +- project.godot | 6 ++- scenes/Babushka_scene_farm_vesna.tscn | 6 ++- .../Common/CharacterControls/Player3D.cs | 54 ++++++++++++------- 6 files changed, 49 insertions(+), 24 deletions(-) delete mode 100644 .idea/.idea.Babushka/.idea/.name diff --git a/.idea/.idea.Babushka/.idea/.name b/.idea/.idea.Babushka/.idea/.name deleted file mode 100644 index 4ba9019..0000000 --- a/.idea/.idea.Babushka/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -Babushka \ No newline at end of file diff --git a/art/mockups/3d/best_house_blender.blend.import b/art/mockups/3d/best_house_blender.blend.import index 7031f50..2f414a6 100644 --- a/art/mockups/3d/best_house_blender.blend.import +++ b/art/mockups/3d/best_house_blender.blend.import @@ -4,12 +4,11 @@ importer="scene" importer_version=1 type="PackedScene" uid="uid://b3kyrsoobmkhp" -path="res://.godot/imported/best_house_blender.blend-ac89c74aef2f275bdf4b4baadee17c0c.scn" +valid=false [deps] source_file="res://art/mockups/3d/best_house_blender.blend" -dest_files=["res://.godot/imported/best_house_blender.blend-ac89c74aef2f275bdf4b4baadee17c0c.scn"] [params] diff --git a/prefabs/UI/Inventory/Inventory.tscn b/prefabs/UI/Inventory/Inventory.tscn index 7f3f516..5435acc 100644 --- a/prefabs/UI/Inventory/Inventory.tscn +++ b/prefabs/UI/Inventory/Inventory.tscn @@ -1,6 +1,6 @@ [gd_scene load_steps=5 format=3 uid="uid://cgjc4wurbgimy"] -[ext_resource type="Script" uid="uid://b7vlkecrn0t5c" path="res://scripts/CSharp/Common/Inventory/InventoryUi.cs" id="1_6wusm"] +[ext_resource type="Script" uid="uid://hg7jay2kt441" path="res://scripts/CSharp/Common/Inventory/InventoryUi.cs" id="1_6wusm"] [ext_resource type="Script" uid="uid://b2jhdxcrhtm2d" path="res://scripts/CSharp/Common/Inventory/InventoryTestScript.cs" id="3_exrk4"] [ext_resource type="Resource" uid="uid://datee0flk1e84" path="res://resources/items/pickaxe.tres" id="4_5fdxq"] [ext_resource type="Texture2D" uid="uid://c7wqla0mbu3np" path="res://graphics/ui/babushka_ui_tmp_inventory_select.png" id="4_tiss4"] @@ -42,6 +42,7 @@ columns = 10 [node name="SlotSelectContainer" type="Control" parent="SlotsContainer"] custom_minimum_size = Vector2(1000, 100) layout_mode = 1 +anchors_preset = 7 anchor_left = 0.5 anchor_top = 1.0 anchor_right = 0.5 diff --git a/project.godot b/project.godot index 2ed10d7..d61222a 100644 --- a/project.godot +++ b/project.godot @@ -66,6 +66,10 @@ translation/id_counter=22 translation/locales=["de", "en"] text/autopauses={} +[display] + +window/size/always_on_top=true + [dotnet] project/assembly_name="Babushka" @@ -129,7 +133,7 @@ interact={ } ui_inventory_open_close={ "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":69,"key_label":0,"unicode":101,"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":73,"key_label":0,"unicode":105,"location":0,"echo":false,"script":null) ] } ui_inventory_advance={ diff --git a/scenes/Babushka_scene_farm_vesna.tscn b/scenes/Babushka_scene_farm_vesna.tscn index 4a3b2e3..6d807cf 100644 --- a/scenes/Babushka_scene_farm_vesna.tscn +++ b/scenes/Babushka_scene_farm_vesna.tscn @@ -40,7 +40,7 @@ _fieldParent = NodePath("../FieldParent") transform = Transform3D(1, 0, 0, 0, 0.618408, 0.785857, 0, -0.785857, 0.618408, -0.802612, 0, 4.73262) [node name="BaseField" parent="." instance=ExtResource("2_72r8y")] -transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.001, 0) +transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.0574723, 0) [node name="HoePickup" parent="." instance=ExtResource("4_r4sre")] transform = Transform3D(1, 0, 0, 0, 1, -1.06581e-14, 0, 1.06581e-14, 1, -4.327, 1.5, -3.447) @@ -53,5 +53,9 @@ shape = SubResource("SphereShape3D_0ptl4") [node name="FieldParent" type="Node3D" parent="."] [node name="Inventory" parent="." instance=ExtResource("5_obfp0")] +visible = false + +[connection signal="Interacted" from="HoePickup" to="HoePickup/SpriteSwitcher Hoe" method="SwitchState"] +[connection signal="Switch" from="HoePickup/SpriteSwitcher Hoe" to="Player3d" method="ActivateHoe"] [editable path="HoePickup"] diff --git a/scripts/CSharp/Common/CharacterControls/Player3D.cs b/scripts/CSharp/Common/CharacterControls/Player3D.cs index a8d4030..665d208 100644 --- a/scripts/CSharp/Common/CharacterControls/Player3D.cs +++ b/scripts/CSharp/Common/CharacterControls/Player3D.cs @@ -1,3 +1,4 @@ +using System.Diagnostics; using Godot; namespace Babushka.scripts.CSharp.Common.CharacterControls; @@ -17,21 +18,25 @@ public partial class Player3D : CharacterBody3D [Export] private AnimatedSprite3D[] _backSpritesAnimated; private bool _sideFlipped; + private Vector2 _lastDirection; public override void _PhysicsProcess(double delta) { - var inputDir = Input.GetVector("move_left", "move_right", "move_up", "move_down"); + var inputDir = Input.GetVector("move_left", "move_right", "move_down", "move_up"); if (inputDir == Vector2.Zero) + { + if(_lastDirection != Vector2.Zero) + SwitchIdleSprites(); return; - + } + MoveOnInput(inputDir, delta); - SwitchSprites(inputDir); + SwitchMovementSprites(inputDir); } private void MoveOnInput(Vector2 inputDir, double delta) { - inputDir = inputDir.Rotated(-_camera.GlobalRotation.Y); - var direction = (Transform.Basis * new Vector3(inputDir.X, 0, inputDir.Y)).Normalized(); + var direction = (Transform.Basis * new Vector3(inputDir.X, 0, inputDir.Y * (-1))).Normalized(); if (direction != Vector3.Zero) Velocity = new Vector3(direction.X * _speed * (float) delta * Scale.X, Velocity.Y, direction.Z * _speed * (float) delta * Scale.Z); else @@ -40,20 +45,34 @@ public partial class Player3D : CharacterBody3D MoveAndSlide(); } - private void SwitchSprites(Vector2 inputDir) + private void SwitchIdleSprites() { - float X = inputDir.X; - float Y = inputDir.Y; - - if (X == 0.0 && Y == 0.0) + if (_lastDirection.X != 0) { - ActivateFrontSpriteIdle(0, true, false, false); + ActivateSprite(0, false, true, false); return; } + if(_lastDirection.Y <= 0.0f) + ActivateSprite(0, true, false, false); + + if(_lastDirection.Y > 0.0f) + ActivateSprite(0, false, false, true); + + _lastDirection = Vector2.Zero; + } + + private void SwitchMovementSprites(Vector2 inputDir) + { + float X = inputDir.X; + float Y = inputDir.Y; + + _lastDirection = new Vector2(X, Y); + Debug.Print(_lastDirection.ToString()); + if (X != 0) { - ActivateFrontSpriteIdle(1, false, true, false); + ActivateSprite(1, false, true, false); if (X > 0.0f) { @@ -74,20 +93,19 @@ public partial class Player3D : CharacterBody3D if (Y != 0) { - if (Y < 0.0f) + if (Y > 0.0f) { - ActivateFrontSpriteIdle(1, false, false, true); + ActivateSprite(1, false, false, true); } - if (Y > 0.0f) + if (Y < 0.0f) { - ActivateFrontSpriteIdle(0, true, false, false); + ActivateSprite(1, true, false, false); } } - } - private void ActivateFrontSpriteIdle(int index, bool frontActive, bool sideActive, bool backActive) + private void ActivateSprite(int index, bool frontActive, bool sideActive, bool backActive) { DeactivateAll(); _frontSpritesAnimated[index].Visible = frontActive;