Compare commits
12 Commits
c200098f0c
...
762a694be3
| Author | SHA1 | Date | |
|---|---|---|---|
| 762a694be3 | |||
| 339428c312 | |||
| 7e19268847 | |||
| 20b37de108 | |||
| 7d1187d218 | |||
| 54b07cccad | |||
| fb0c14c3f1 | |||
| fb362e10ad | |||
| c73d3ff370 | |||
| e99b574d1f | |||
| 1062193785 | |||
| 9190b2a16a |
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="AndroidProjectSystem">
|
||||||
|
<option name="providerId" value="RiderAndroidProjectSystem" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<component name="libraryTable">
|
||||||
|
<library name="GdSdk Master" type="GdScript">
|
||||||
|
<properties path="$USER_HOME$/.cache/JetBrains/Rider2025.1/projects/.idea.babushka.a4de4632/sdk/GdSdk Master" version="Master" date="2024-06-01T15:14:16.000+02:00" />
|
||||||
|
<CLASSES />
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES>
|
||||||
|
<root url="file://$USER_HOME$/.cache/JetBrains/Rider2025.1/projects/.idea.babushka.a4de4632/sdk/GdSdk Master" />
|
||||||
|
</SOURCES>
|
||||||
|
</library>
|
||||||
|
</component>
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AArea3D_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F8a54226fa2e1c9371a8091f24cfd744aef11fe6869527dc23b9b837623a29b9_003FArea3D_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003AArea3D_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2024_002E3_003Fresharper_002Dhost_003FSourcesCache_003F8a54226fa2e1c9371a8091f24cfd744aef11fe6869527dc23b9b837623a29b9_003FArea3D_002Ecs/@EntryIndexedValue">ForceIncluded</s:String>
|
||||||
|
<s:String x:Key="/Default/CodeInspection/ExcludedFiles/FilesAndFoldersToSkip2/=7020124F_002D9FFC_002D4AC3_002D8F3D_002DAAB8E0240759_002Ff_003ACastHelpers_002Ecs_002Fl_003A_002E_002E_003F_002E_002E_003F_002E_002E_003F_002E_002E_003F_002Econfig_003FJetBrains_003FRider2025_002E1_003Fresharper_002Dhost_003FDecompilerCache_003Fdecompiler_003Fd111abf504bf42b5968a609b168fd093b2e200_003Fbb_003F1c116fcd_003FCastHelpers_002Ecs/@EntryIndexedValue">ForceIncluded</s:String></wpf:ResourceDictionary>
|
||||||
@@ -3,25 +3,26 @@
|
|||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://csig0r8rffflt"
|
uid="uid://csig0r8rffflt"
|
||||||
path="res://.godot/imported/fence part end part.png-eb57fa6bd3b30e6dbbabec560b997ff4.ctex"
|
path.s3tc="res://.godot/imported/fence part end part.png-eb57fa6bd3b30e6dbbabec560b997ff4.s3tc.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"imported_formats": ["s3tc_bptc"],
|
||||||
|
"vram_texture": true
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://art/farm/farming/farmobjekte/zaun/fence part end part.png"
|
source_file="res://art/farm/farming/farmobjekte/zaun/fence part end part.png"
|
||||||
dest_files=["res://.godot/imported/fence part end part.png-eb57fa6bd3b30e6dbbabec560b997ff4.ctex"]
|
dest_files=["res://.godot/imported/fence part end part.png-eb57fa6bd3b30e6dbbabec560b997ff4.s3tc.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
compress/mode=0
|
compress/mode=2
|
||||||
compress/high_quality=false
|
compress/high_quality=false
|
||||||
compress/lossy_quality=0.7
|
compress/lossy_quality=0.7
|
||||||
compress/hdr_compression=1
|
compress/hdr_compression=1
|
||||||
compress/normal_map=0
|
compress/normal_map=0
|
||||||
compress/channel_pack=0
|
compress/channel_pack=0
|
||||||
mipmaps/generate=false
|
mipmaps/generate=true
|
||||||
mipmaps/limit=-1
|
mipmaps/limit=-1
|
||||||
roughness/mode=0
|
roughness/mode=0
|
||||||
roughness/src_normal=""
|
roughness/src_normal=""
|
||||||
@@ -31,4 +32,4 @@ process/normal_map_invert_y=false
|
|||||||
process/hdr_as_srgb=false
|
process/hdr_as_srgb=false
|
||||||
process/hdr_clamp_exposure=false
|
process/hdr_clamp_exposure=false
|
||||||
process/size_limit=0
|
process/size_limit=0
|
||||||
detect_3d/compress_to=1
|
detect_3d/compress_to=0
|
||||||
|
|||||||
@@ -1337,12 +1337,11 @@ sprite_frames = SubResource("SpriteFrames_4q8ml")
|
|||||||
autoplay = "default"
|
autoplay = "default"
|
||||||
frame_progress = 0.481133
|
frame_progress = 0.481133
|
||||||
|
|
||||||
[node name="FarmingControls" type="Node3D" parent="." node_paths=PackedStringArray("_hoeSprite", "_wateringCanSprite", "_movingPlayer")]
|
[node name="FarmingControls" type="Node3D" parent="." node_paths=PackedStringArray("_hoeSprite", "_wateringCanSprite", "_movingPlayer", "_camera")]
|
||||||
script = ExtResource("4_q5t2e")
|
script = ExtResource("4_q5t2e")
|
||||||
_hoeSprite = NodePath("../CharacterBody3D/Farming/Hoe")
|
_hoeSprite = NodePath("../CharacterBody3D/Farming/Hoe")
|
||||||
_wateringCanSprite = NodePath("../CharacterBody3D/Farming/Watering can")
|
_wateringCanSprite = NodePath("../CharacterBody3D/Farming/Watering can")
|
||||||
_fieldPrefab = ExtResource("2_oq5hi")
|
_fieldPrefab = ExtResource("2_oq5hi")
|
||||||
_movingPlayer = NodePath("../CharacterBody3D")
|
_movingPlayer = NodePath("../CharacterBody3D")
|
||||||
|
_camera = NodePath("../CharacterBody3D/CameraPivot2/SubPivot/Camera3D")
|
||||||
metadata/_custom_type_script = "uid://b1sscdr4ptec8"
|
metadata/_custom_type_script = "uid://b1sscdr4ptec8"
|
||||||
|
|
||||||
[connection signal="WaterField" from="FarmingControls" to="." method="UseWateringCan"]
|
|
||||||
|
|||||||
@@ -41,4 +41,22 @@ label_settings = SubResource("LabelSettings_7emux")
|
|||||||
horizontal_alignment = 1
|
horizontal_alignment = 1
|
||||||
vertical_alignment = 1
|
vertical_alignment = 1
|
||||||
|
|
||||||
|
[node name="AmountLabel" type="Label" parent="."]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = -1
|
||||||
|
anchor_left = 1.0
|
||||||
|
anchor_top = 1.0
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
offset_left = -409.0
|
||||||
|
offset_top = -329.0
|
||||||
|
offset_right = -10.0
|
||||||
|
offset_bottom = -10.0
|
||||||
|
grow_horizontal = 0
|
||||||
|
grow_vertical = 0
|
||||||
|
theme_override_colors/font_color = Color(0, 0, 0, 1)
|
||||||
|
text = "999"
|
||||||
|
horizontal_alignment = 2
|
||||||
|
vertical_alignment = 2
|
||||||
|
|
||||||
[connection signal="gui_input" from="." to="." method="_on_gui_input"]
|
[connection signal="gui_input" from="." to="." method="_on_gui_input"]
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
[gd_scene load_steps=6 format=3 uid="uid://biwd3jj65qrlh"]
|
[gd_scene load_steps=7 format=3 uid="uid://biwd3jj65qrlh"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://c2pirgay3jfnn" path="res://art/farm/tilable grounds/böden/trockene farming erde.png" id="1_2cisk"]
|
[ext_resource type="Texture2D" uid="uid://c2pirgay3jfnn" path="res://art/farm/tilable grounds/böden/trockene farming erde.png" id="1_2cisk"]
|
||||||
[ext_resource type="Script" uid="uid://histmmyi1wr" path="res://scripts/CSharp/Common/Farming/FieldBehaviour.cs" id="2_u7egi"]
|
[ext_resource type="Script" uid="uid://histmmyi1wr" path="res://scripts/CSharp/Common/Farming/FieldBehaviour.cs" id="2_u7egi"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://ctvdxwgmfaj5c" path="res://art/farm/tilable grounds/böden/nasse farming erde.png" id="4_lsseu"]
|
||||||
[ext_resource type="PackedScene" uid="uid://bjhj1wa5olwcu" path="res://prefabs/farming/base_plant.tscn" id="4_u7egi"]
|
[ext_resource type="PackedScene" uid="uid://bjhj1wa5olwcu" path="res://prefabs/farming/base_plant.tscn" id="4_u7egi"]
|
||||||
[ext_resource type="PackedScene" uid="uid://ob04y3syvo0e" path="res://prefabs/interaction_area.tscn" id="4_xc4m0"]
|
[ext_resource type="PackedScene" uid="uid://ob04y3syvo0e" path="res://prefabs/interaction_area.tscn" id="4_xc4m0"]
|
||||||
|
|
||||||
@@ -18,17 +19,20 @@ _showLabel = false
|
|||||||
[node name="CollisionShape3D" parent="InteractionArea/Area3D" index="0"]
|
[node name="CollisionShape3D" parent="InteractionArea/Area3D" index="0"]
|
||||||
shape = SubResource("SphereShape3D_u7egi")
|
shape = SubResource("SphereShape3D_u7egi")
|
||||||
|
|
||||||
[node name="Sprite3D" type="Sprite3D" parent="."]
|
[node name="FieldBehaviour" type="Sprite3D" parent="."]
|
||||||
transform = Transform3D(0.4, 0, 0, 0, -1.74846e-08, -0.4, 0, 0.4, -1.74846e-08, 0, 0, 0)
|
transform = Transform3D(0.4, 0, 0, 0, -1.74846e-08, -0.4, 0, 0.4, -1.74846e-08, 0, 0, 0)
|
||||||
pixel_size = 0.004
|
pixel_size = 0.004
|
||||||
texture = ExtResource("1_2cisk")
|
|
||||||
script = ExtResource("2_u7egi")
|
script = ExtResource("2_u7egi")
|
||||||
Tilled = ExtResource("1_2cisk")
|
Tilled = ExtResource("1_2cisk")
|
||||||
|
Watered = ExtResource("4_lsseu")
|
||||||
FieldState = 1
|
FieldState = 1
|
||||||
|
metadata/_custom_type_script = "uid://histmmyi1wr"
|
||||||
|
|
||||||
[node name="BasePlant" parent="Sprite3D" instance=ExtResource("4_u7egi")]
|
[node name="BasePlant" parent="FieldBehaviour" node_paths=PackedStringArray("_seeds", "_smallPlants", "_bigPlants", "_readyPlants") instance=ExtResource("4_u7egi")]
|
||||||
transform = Transform3D(0.5, 0, 0, 0, -2.18557e-08, 0.5, 0, -0.5, -2.18557e-08, 0, 0, 0)
|
transform = Transform3D(0.5, 0, 0, 0, -2.18557e-08, 0.5, 0, -0.5, -2.18557e-08, 0, 0, 0)
|
||||||
|
_seeds = [null, null, null]
|
||||||
[connection signal="Interacted" from="InteractionArea" to="Sprite3D/BasePlant" method="Grow"]
|
_smallPlants = [null, null, null, null]
|
||||||
|
_bigPlants = [null, null, null, null]
|
||||||
|
_readyPlants = [null, null, null, null]
|
||||||
|
|
||||||
[editable path="InteractionArea"]
|
[editable path="InteractionArea"]
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://5hltxpdxmqcq"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://udhigottc8rg" path="res://scripts/CSharp/Common/Inventory/ItemOnGround.cs" id="1_mnomu"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://ob04y3syvo0e" path="res://prefabs/interaction_area.tscn" id="2_ue6ub"]
|
||||||
|
[ext_resource type="Script" uid="uid://c8suoi3i6kqai" path="res://scripts/CSharp/Common/Inventory/ItemOnGroundSpawnWith.cs" id="3_ue6ub"]
|
||||||
|
[ext_resource type="Resource" uid="uid://c7viddcd3kywp" path="res://resources/items/axe.tres" id="4_sfad0"]
|
||||||
|
|
||||||
|
[node name="GenericItemOnGround" type="Node3D"]
|
||||||
|
script = ExtResource("1_mnomu")
|
||||||
|
|
||||||
|
[node name="InteractionArea" parent="." instance=ExtResource("2_ue6ub")]
|
||||||
|
|
||||||
|
[node name="SpawnWithItem" type="Node" parent="."]
|
||||||
|
script = ExtResource("3_ue6ub")
|
||||||
|
_blueprint = ExtResource("4_sfad0")
|
||||||
|
|
||||||
|
[node name="ItemLabel" type="Label3D" parent="."]
|
||||||
|
offset = Vector2(0, 55.64)
|
||||||
|
billboard = 1
|
||||||
|
text = "test"
|
||||||
|
|
||||||
|
[node name="PickupErrorLabel" type="Label3D" parent="."]
|
||||||
|
offset = Vector2(0, 150)
|
||||||
|
billboard = 1
|
||||||
|
|
||||||
|
[connection signal="Interacted" from="InteractionArea" to="." method="TryPickUp"]
|
||||||
@@ -6,4 +6,5 @@
|
|||||||
script = ExtResource("1_t485b")
|
script = ExtResource("1_t485b")
|
||||||
name = "Axe Deo"
|
name = "Axe Deo"
|
||||||
color = Color(0.643898, 0.4587, 0.294335, 1)
|
color = Color(0.643898, 0.4587, 0.294335, 1)
|
||||||
|
maxStack = 1
|
||||||
metadata/_custom_type_script = "uid://cbskymrxs6ksu"
|
metadata/_custom_type_script = "uid://cbskymrxs6ksu"
|
||||||
|
|||||||
@@ -6,4 +6,5 @@
|
|||||||
script = ExtResource("1_8k5aa")
|
script = ExtResource("1_8k5aa")
|
||||||
name = "Buck the Bucket"
|
name = "Buck the Bucket"
|
||||||
color = Color(0.336269, 0.489145, 0.825324, 1)
|
color = Color(0.336269, 0.489145, 0.825324, 1)
|
||||||
|
maxStack = 1
|
||||||
metadata/_custom_type_script = "uid://cbskymrxs6ksu"
|
metadata/_custom_type_script = "uid://cbskymrxs6ksu"
|
||||||
|
|||||||
@@ -6,4 +6,5 @@
|
|||||||
script = ExtResource("1_06nef")
|
script = ExtResource("1_06nef")
|
||||||
name = "Your Mom"
|
name = "Your Mom"
|
||||||
color = Color(0.751421, 0.329615, 0.570911, 1)
|
color = Color(0.751421, 0.329615, 0.570911, 1)
|
||||||
|
maxStack = 1
|
||||||
metadata/_custom_type_script = "uid://cbskymrxs6ksu"
|
metadata/_custom_type_script = "uid://cbskymrxs6ksu"
|
||||||
|
|||||||
@@ -0,0 +1,10 @@
|
|||||||
|
[gd_resource type="Resource" script_class="ItemResource" load_steps=2 format=3 uid="uid://d1uuxp1lp4aro"]
|
||||||
|
|
||||||
|
[ext_resource type="Script" uid="uid://cbskymrxs6ksu" path="res://scripts/CSharp/Common/Inventory/ItemResource.cs" id="1_dustj"]
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
script = ExtResource("1_dustj")
|
||||||
|
name = "Tomato Seed"
|
||||||
|
color = Color(0.135039, 0.307214, 0.333128, 1)
|
||||||
|
maxStack = 20
|
||||||
|
metadata/_custom_type_script = "uid://cbskymrxs6ksu"
|
||||||
@@ -0,0 +1,75 @@
|
|||||||
|
[gd_scene load_steps=12 format=3 uid="uid://dbxy2y85r1d8x"]
|
||||||
|
|
||||||
|
[ext_resource type="PackedScene" uid="uid://dbd1niu3tp8y5" path="res://prefabs/Player3D.tscn" id="1_pdc5e"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://biwd3jj65qrlh" path="res://prefabs/farming/base_field.tscn" id="2_741gk"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://5hltxpdxmqcq" path="res://prefabs/interactions/generic_item_on_ground.tscn" id="5_sjt6k"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://cgjc4wurbgimy" path="res://prefabs/UI/Inventory/Inventory.tscn" id="6_876p1"]
|
||||||
|
[ext_resource type="Resource" uid="uid://cndd64batns31" path="res://resources/items/bucket.tres" id="6_nvnpb"]
|
||||||
|
[ext_resource type="Script" uid="uid://c6hh7m8wikv04" path="res://scripts/CSharp/Common/Farming/FieldService.cs" id="7_3rkjv"]
|
||||||
|
[ext_resource type="Resource" uid="uid://c5yg3lx756v4v" path="res://resources/items/hoe.tres" id="7_hv2km"]
|
||||||
|
[ext_resource type="Resource" uid="uid://d1uuxp1lp4aro" path="res://resources/items/tomato_seed.tres" id="8_hv2km"]
|
||||||
|
|
||||||
|
[sub_resource type="PlaneMesh" id="PlaneMesh_8yprl"]
|
||||||
|
|
||||||
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8tgff"]
|
||||||
|
albedo_color = Color(0.505882, 0.588235, 0.494118, 1)
|
||||||
|
|
||||||
|
[sub_resource type="BoxShape3D" id="BoxShape3D_t58di"]
|
||||||
|
size = Vector3(2.01563, 0.160522, 2.00824)
|
||||||
|
|
||||||
|
[node name="SceneFarmVesna" type="Node3D"]
|
||||||
|
|
||||||
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
|
||||||
|
transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, 0, 0, 0)
|
||||||
|
mesh = SubResource("PlaneMesh_8yprl")
|
||||||
|
skeleton = NodePath("")
|
||||||
|
surface_material_override/0 = SubResource("StandardMaterial3D_8tgff")
|
||||||
|
|
||||||
|
[node name="StaticBody3D" type="StaticBody3D" parent="MeshInstance3D"]
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="MeshInstance3D/StaticBody3D"]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.000976563, -0.0739136, -0.00112915)
|
||||||
|
shape = SubResource("BoxShape3D_t58di")
|
||||||
|
|
||||||
|
[node name="Player3d" parent="." node_paths=PackedStringArray("_fieldParent") instance=ExtResource("1_pdc5e")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.51633, 0.725631, 3.57249)
|
||||||
|
_fieldParent = NodePath("../FieldService")
|
||||||
|
|
||||||
|
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
||||||
|
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_741gk")]
|
||||||
|
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0.0574723, 0)
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="Inventory" parent="." instance=ExtResource("6_876p1")]
|
||||||
|
|
||||||
|
[node name="FieldService" type="Node3D" parent="."]
|
||||||
|
script = ExtResource("7_3rkjv")
|
||||||
|
|
||||||
|
[node name="GenericItemOnGround" parent="." instance=ExtResource("5_sjt6k")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5.53971, -4.76837e-07, -3.81996)
|
||||||
|
|
||||||
|
[node name="SpawnWithItem" parent="GenericItemOnGround" index="1"]
|
||||||
|
_blueprint = ExtResource("6_nvnpb")
|
||||||
|
|
||||||
|
[node name="GenericItemOnGround2" parent="." instance=ExtResource("5_sjt6k")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.73646, -9.53674e-07, -3.96783)
|
||||||
|
|
||||||
|
[node name="GenericItemOnGround3" parent="." instance=ExtResource("5_sjt6k")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2.43861, -4.76837e-07, -3.93506)
|
||||||
|
|
||||||
|
[node name="SpawnWithItem" parent="GenericItemOnGround3" index="1"]
|
||||||
|
_blueprint = ExtResource("7_hv2km")
|
||||||
|
|
||||||
|
[node name="GenericItemOnGround4" parent="." instance=ExtResource("5_sjt6k")]
|
||||||
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.1678, -4.76837e-07, -3.94977)
|
||||||
|
_infiniteSupply = true
|
||||||
|
|
||||||
|
[node name="SpawnWithItem" parent="GenericItemOnGround4" index="1"]
|
||||||
|
_blueprint = ExtResource("8_hv2km")
|
||||||
|
|
||||||
|
[editable path="GenericItemOnGround"]
|
||||||
|
[editable path="GenericItemOnGround2"]
|
||||||
|
[editable path="GenericItemOnGround3"]
|
||||||
|
[editable path="GenericItemOnGround4"]
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://bblprbhnbyv77
|
||||||
@@ -1,5 +1,8 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.Linq;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
using Godot.Collections;
|
||||||
|
|
||||||
namespace Babushka.scripts.CSharp.Common.Farming;
|
namespace Babushka.scripts.CSharp.Common.Farming;
|
||||||
|
|
||||||
@@ -10,6 +13,7 @@ public partial class FarmingControls : Node3D
|
|||||||
[Export] private Sprite3D _wateringCanSprite;
|
[Export] private Sprite3D _wateringCanSprite;
|
||||||
[Export] private PackedScene _fieldPrefab;
|
[Export] private PackedScene _fieldPrefab;
|
||||||
[Export] private Node3D _movingPlayer;
|
[Export] private Node3D _movingPlayer;
|
||||||
|
[Export] private Camera3D _camera;
|
||||||
|
|
||||||
public FieldService FieldParent;
|
public FieldService FieldParent;
|
||||||
|
|
||||||
@@ -42,45 +46,63 @@ public partial class FarmingControls : Node3D
|
|||||||
|
|
||||||
public override void _Input(InputEvent @event)
|
public override void _Input(InputEvent @event)
|
||||||
{
|
{
|
||||||
if (@event.IsActionPressed("click") && _hoeInHand)
|
Vector2 mousePosition = GetViewport().GetMousePosition();
|
||||||
{
|
var dropPlane = new Plane(new Vector3(0, 0, 10), 10);
|
||||||
MakeField();
|
Vector3? position3D = dropPlane.IntersectsRay(_camera.ProjectRayOrigin(mousePosition),
|
||||||
}
|
_camera.ProjectRayNormal(mousePosition));
|
||||||
|
Debug.Print(position3D.ToString());
|
||||||
|
|
||||||
if (@event.IsActionPressed("click") && _waterCanInHand)
|
if (position3D.HasValue)
|
||||||
{
|
{
|
||||||
WaterTheField();
|
Vector2I adjustedPosition = new Vector2I(AdjustValue(position3D.Value.X), AdjustValue(position3D.Value.Y));
|
||||||
|
|
||||||
|
if (@event.IsActionPressed("click") && _hoeInHand)
|
||||||
|
{
|
||||||
|
MakeField(adjustedPosition);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (@event.IsActionPressed("click") && _waterCanInHand)
|
||||||
|
{
|
||||||
|
WaterTheField(adjustedPosition);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void WaterTheField()
|
private void WaterTheField(Vector2I fieldPosition)
|
||||||
{
|
{
|
||||||
|
FieldBehaviour field = FieldParent.Get(fieldPosition);
|
||||||
|
if (field == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
field.Water();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void MakeField()
|
private void MakeField(Vector2I fieldPosition)
|
||||||
{
|
{
|
||||||
if(FieldParent == null || _fieldPrefab == null)
|
if(FieldParent == null || _fieldPrefab == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Node fieldInstance = _fieldPrefab.Instantiate();
|
|
||||||
|
|
||||||
if (fieldInstance is Node3D field3d)
|
// only instantiate a field if there isn't one already.
|
||||||
|
if(FieldParent.Get(fieldPosition) == null)
|
||||||
{
|
{
|
||||||
Vector3 playerPos = _movingPlayer.GlobalPosition;
|
Node fieldInstance = _fieldPrefab.Instantiate();
|
||||||
playerPos = new Vector3(AdjustValue(playerPos.X), 0.1f, AdjustValue(playerPos.Z));
|
if (fieldInstance is Node3D field3d)
|
||||||
field3d.Position = playerPos;
|
{
|
||||||
Vector2I intPosition = new Vector2I((int) playerPos.X, (int) playerPos.Z);
|
// add dictionary entry for the field
|
||||||
FieldParent.AddEntry(intPosition, FieldState.Tilled);
|
Array<Node> fields = field3d.FindChildren("*", nameof(FieldBehaviour));
|
||||||
|
if (fields.Count > 0)
|
||||||
|
FieldParent.TryAddEntry(fieldPosition, fields[0] as FieldBehaviour);
|
||||||
|
|
||||||
|
// reposition and reparent the instance
|
||||||
|
field3d.Position = new Vector3(fieldPosition.X, 0.1f, fieldPosition.Y * -1);;
|
||||||
|
FieldParent.AddChild(fieldInstance);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
FieldParent.AddChild(fieldInstance);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private float AdjustValue(float value)
|
private int AdjustValue(float value)
|
||||||
{
|
{
|
||||||
return Mathf.Floor(value);
|
return (int) Mathf.Floor(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,54 +1,59 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
using Godot;
|
using Godot;
|
||||||
|
|
||||||
namespace Babushka.scripts.CSharp.Common.Farming;
|
namespace Babushka.scripts.CSharp.Common.Farming
|
||||||
|
|
||||||
public enum FieldState
|
|
||||||
{
|
{
|
||||||
Empty = 0,
|
public enum FieldState
|
||||||
Tilled = 1,
|
{
|
||||||
Planted = 2,
|
Empty = 0,
|
||||||
Watered = 3
|
Tilled = 1,
|
||||||
|
Planted = 2,
|
||||||
|
Watered = 3,
|
||||||
|
NotFound = 99
|
||||||
|
}
|
||||||
|
|
||||||
|
[GlobalClass]
|
||||||
|
public partial class FieldBehaviour : Sprite3D
|
||||||
|
{
|
||||||
|
[Export] private Texture2D Tilled;
|
||||||
|
[Export] private Texture2D Watered;
|
||||||
|
[Export] public FieldState FieldState = FieldState.Empty;
|
||||||
|
|
||||||
|
public Vector2 FieldPosition;
|
||||||
|
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
Texture = Tilled;
|
||||||
|
base._Ready();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Water()
|
||||||
|
{
|
||||||
|
FieldState = FieldState.Watered;
|
||||||
|
Texture = Watered;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called when the player enters the field'S interaction area and presses <E>.
|
||||||
|
/// </summary>
|
||||||
|
public void Farm()
|
||||||
|
{
|
||||||
|
switch (FieldState)
|
||||||
|
{
|
||||||
|
case FieldState.Empty:
|
||||||
|
Texture = Tilled;
|
||||||
|
FieldState = FieldState.Tilled;
|
||||||
|
break;
|
||||||
|
case FieldState.Tilled:
|
||||||
|
FieldState = FieldState.Planted;
|
||||||
|
break;
|
||||||
|
case FieldState.Planted:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public partial class FieldBehaviour : Sprite3D
|
|
||||||
{
|
|
||||||
[Export] private Texture2D Tilled;
|
|
||||||
[Export] private Texture2D Watered;
|
|
||||||
[Export] private FieldState FieldState = FieldState.Empty;
|
|
||||||
|
|
||||||
public Vector2 FieldPosition;
|
|
||||||
|
|
||||||
public override void _Ready()
|
|
||||||
{
|
|
||||||
Texture = Tilled;
|
|
||||||
base._Ready();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Water()
|
|
||||||
{
|
|
||||||
FieldState = FieldState.Watered;
|
|
||||||
Texture = Watered;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Called when the player enters the field'S interaction area and presses <E>.
|
|
||||||
/// </summary>
|
|
||||||
public void Farm()
|
|
||||||
{
|
|
||||||
switch (FieldState)
|
|
||||||
{
|
|
||||||
case FieldState.Empty:
|
|
||||||
Texture = Tilled;
|
|
||||||
FieldState = FieldState.Tilled;
|
|
||||||
break;
|
|
||||||
case FieldState.Tilled:
|
|
||||||
FieldState = FieldState.Planted;
|
|
||||||
break;
|
|
||||||
case FieldState.Planted:
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
using Godot;
|
using Godot;
|
||||||
using Godot.Collections;
|
using Godot.Collections;
|
||||||
|
|
||||||
@@ -6,32 +7,39 @@ namespace Babushka.scripts.CSharp.Common.Farming;
|
|||||||
[GlobalClass]
|
[GlobalClass]
|
||||||
public partial class FieldService : Node3D
|
public partial class FieldService : Node3D
|
||||||
{
|
{
|
||||||
[Export] private Dictionary<Vector2I, FieldState> fields = new Dictionary<Vector2I, FieldState>();
|
[Export] private Dictionary<Vector2I, FieldBehaviour> fields = new Dictionary<Vector2I, FieldBehaviour>();
|
||||||
|
|
||||||
//Create
|
//Create
|
||||||
|
public bool TryAddEntry(Vector2I key, FieldBehaviour field)
|
||||||
public void AddEntry(Vector2I key, FieldState state)
|
|
||||||
{
|
{
|
||||||
fields.Add(key, state);
|
if (!fields.ContainsKey(key))
|
||||||
|
{
|
||||||
|
fields.Add(key, field);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read
|
// Read
|
||||||
|
public FieldBehaviour Get(Vector2I key)
|
||||||
public FieldState Get(Vector2I key)
|
|
||||||
{
|
{
|
||||||
return fields[key];
|
if (fields.TryGetValue(key, out FieldBehaviour field))
|
||||||
|
return field;
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Update
|
//Update
|
||||||
public void UpdateEntry(Vector2I fieldPosition, FieldState state)
|
public void UpdateEntry(Vector2I fieldPosition, FieldBehaviour state)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (fields.ContainsKey(fieldPosition))
|
if (fields.ContainsKey(fieldPosition))
|
||||||
{
|
{
|
||||||
fields[fieldPosition] = state;
|
fields[fieldPosition] = state;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
AddEntry(fieldPosition, state);
|
TryAddEntry(fieldPosition, state);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://c6hh7m8wikv04
|
||||||
@@ -12,6 +12,7 @@ public partial class InventoryInstance : Node
|
|||||||
|
|
||||||
[Signal]
|
[Signal]
|
||||||
public delegate void SlotAmountChangedEventHandler();
|
public delegate void SlotAmountChangedEventHandler();
|
||||||
|
|
||||||
[Signal]
|
[Signal]
|
||||||
public delegate void InventoryContentsChangedEventHandler();
|
public delegate void InventoryContentsChangedEventHandler();
|
||||||
|
|
||||||
@@ -32,54 +33,99 @@ public partial class InventoryInstance : Node
|
|||||||
_slots.Add(new InventorySlot());
|
_slots.Add(new InventorySlot());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EmitSignal(SignalName.SlotAmountChanged);
|
EmitSignal(SignalName.SlotAmountChanged);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public InventoryActionResult AddItem(ItemInstance newItem, int inventorySlot = -1)
|
public InventoryActionResult AddItem(ItemInstance newItem)
|
||||||
{
|
{
|
||||||
if (inventorySlot < 0)
|
var result = AddItemAndStackRecursive(newItem, 0);
|
||||||
|
EmitSignal(SignalName.InventoryContentsChanged);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
private InventoryActionResult AddItemAndStackRecursive(ItemInstance newItem, int slotSearch)
|
||||||
|
{
|
||||||
|
if (newItem.blueprint == null || newItem.amount == 0)
|
||||||
|
return InventoryActionResult.SourceDoesNotExists;
|
||||||
|
|
||||||
|
var slotIndex = -1;
|
||||||
|
// find stackable slot
|
||||||
|
for (var i = slotSearch; i < _slots.Count; i++)
|
||||||
{
|
{
|
||||||
inventorySlot = _slots.FindIndex(slot => slot.IsEmpty());
|
if (_slots[i].itemInstance?.blueprint == newItem.blueprint)
|
||||||
|
{
|
||||||
|
slotIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inventorySlot < 0 || !_slots[inventorySlot].IsEmpty())
|
if (slotIndex < 0)
|
||||||
|
{
|
||||||
|
// find empty slot
|
||||||
|
for (var i = slotSearch; i < _slots.Count; i++)
|
||||||
|
{
|
||||||
|
if (_slots[i].IsEmpty())
|
||||||
|
{
|
||||||
|
slotIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (slotIndex < 0)
|
||||||
{
|
{
|
||||||
return InventoryActionResult.DestinationFull;
|
return InventoryActionResult.DestinationFull;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (inventorySlot >= _slots.Count)
|
var itemInstance = _slots[slotIndex].itemInstance ?? new ItemInstance { blueprint = newItem.blueprint, amount = 0 };
|
||||||
{
|
var maxStack = itemInstance!.blueprint.maxStack;
|
||||||
return InventoryActionResult.DestinationDoesNotExists;
|
var freeOnStack = maxStack - itemInstance.amount;
|
||||||
}
|
var moveAmount = Math.Min(freeOnStack, newItem.amount);
|
||||||
|
itemInstance.amount += moveAmount;
|
||||||
_slots[inventorySlot].itemInstance = newItem;
|
newItem.amount -= moveAmount;
|
||||||
EmitSignal(SignalName.InventoryContentsChanged);
|
_slots[slotIndex].itemInstance = itemInstance;
|
||||||
return InventoryActionResult.Success;
|
return newItem.amount <= 0
|
||||||
|
? InventoryActionResult.Success
|
||||||
|
: AddItemAndStackRecursive(newItem, slotIndex + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InventoryActionResult RemoveItem(int inventorySlot, out ItemInstance? itemInstance )
|
public InventoryActionResult RemoveItem(int inventorySlot, out ItemInstance? itemInstance)
|
||||||
{
|
{
|
||||||
if (inventorySlot < 0 || inventorySlot >= _slots.Count)
|
if (inventorySlot < 0 || inventorySlot >= _slots.Count)
|
||||||
{
|
{
|
||||||
itemInstance = null;
|
itemInstance = null;
|
||||||
return InventoryActionResult.SourceDoesNotExists;
|
return InventoryActionResult.SourceDoesNotExists;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_slots[inventorySlot].IsEmpty())
|
if (_slots[inventorySlot].IsEmpty())
|
||||||
{
|
{
|
||||||
itemInstance = null;
|
itemInstance = null;
|
||||||
return InventoryActionResult.SourceIsEmpty;
|
return InventoryActionResult.SourceIsEmpty;
|
||||||
}
|
}
|
||||||
|
|
||||||
itemInstance = _slots[inventorySlot].itemInstance;
|
itemInstance = _slots[inventorySlot].itemInstance;
|
||||||
_slots[inventorySlot].itemInstance = null;
|
_slots[inventorySlot].itemInstance = null;
|
||||||
EmitSignal(SignalName.InventoryContentsChanged);
|
EmitSignal(SignalName.InventoryContentsChanged);
|
||||||
return InventoryActionResult.Success;
|
return InventoryActionResult.Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
public InventoryActionResult RemoveItem(int inventorySlot)
|
public InventoryActionResult RemoveItem(int inventorySlot)
|
||||||
{
|
{
|
||||||
return RemoveItem(inventorySlot, out _);
|
return RemoveItem(inventorySlot, out _);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public InventoryActionResult AddItemToSlot(ItemInstance itemInstance, int destinationSlot)
|
||||||
|
{
|
||||||
|
if (destinationSlot < 0 || destinationSlot >= _slots.Count)
|
||||||
|
return InventoryActionResult.DestinationDoesNotExists;
|
||||||
|
|
||||||
|
if (!_slots[destinationSlot].IsEmpty())
|
||||||
|
return InventoryActionResult.DestinationFull;
|
||||||
|
|
||||||
|
_slots[destinationSlot].itemInstance = itemInstance;
|
||||||
|
EmitSignal(SignalName.InventoryContentsChanged);
|
||||||
|
return InventoryActionResult.Success;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,7 +6,7 @@ namespace Babushka.scripts.CSharp.Common.Inventory;
|
|||||||
public partial class InventoryManager : Node
|
public partial class InventoryManager : Node
|
||||||
{
|
{
|
||||||
public static InventoryManager Instance { get; private set; }
|
public static InventoryManager Instance { get; private set; }
|
||||||
|
|
||||||
public InventoryInstance playerInventory;
|
public InventoryInstance playerInventory;
|
||||||
|
|
||||||
public override void _EnterTree()
|
public override void _EnterTree()
|
||||||
@@ -23,11 +23,13 @@ public partial class InventoryManager : Node
|
|||||||
public InventoryActionResult CreateItem(
|
public InventoryActionResult CreateItem(
|
||||||
ItemResource itemBlueprint,
|
ItemResource itemBlueprint,
|
||||||
InventoryInstance inventory,
|
InventoryInstance inventory,
|
||||||
|
int amount = 1,
|
||||||
int inventorySlot = -1)
|
int inventorySlot = -1)
|
||||||
{
|
{
|
||||||
var newItem = new ItemInstance { blueprint = itemBlueprint };
|
var newItem = new ItemInstance { blueprint = itemBlueprint, amount = amount };
|
||||||
var addResult = inventory.AddItem(newItem, inventorySlot);
|
return inventorySlot < 0
|
||||||
return addResult;
|
? inventory.AddItem(newItem)
|
||||||
|
: inventory.AddItemToSlot(newItem, inventorySlot);
|
||||||
}
|
}
|
||||||
|
|
||||||
public InventoryActionResult MoveItem(
|
public InventoryActionResult MoveItem(
|
||||||
@@ -39,10 +41,11 @@ public partial class InventoryManager : Node
|
|||||||
var remResult = sourceInventory.RemoveItem(sourceSlot, out var item);
|
var remResult = sourceInventory.RemoveItem(sourceSlot, out var item);
|
||||||
if (remResult != InventoryActionResult.Success) return remResult;
|
if (remResult != InventoryActionResult.Success) return remResult;
|
||||||
|
|
||||||
var addResult = destinationInventory.AddItem(item!, destinationSlot);
|
var addResult = destinationInventory.AddItemToSlot(item!, destinationSlot);
|
||||||
if(addResult == InventoryActionResult.Success) return InventoryActionResult.Success;
|
if (addResult == InventoryActionResult.Success) return InventoryActionResult.Success;
|
||||||
|
|
||||||
sourceInventory.AddItem(item!, sourceSlot); // can not fail ... in theory
|
// if adding in the destination failed, re-add the item into the source
|
||||||
|
sourceInventory.AddItemToSlot(item!, sourceSlot); // can not fail ... in theory
|
||||||
return addResult;
|
return addResult;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,4 +63,9 @@ public partial class InventoryManager : Node
|
|||||||
{
|
{
|
||||||
return inventory.RemoveItem(inventorySlot);
|
return inventory.RemoveItem(inventorySlot);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
public InventoryActionResult CollectItem(ItemInstance itemInstance)
|
||||||
|
{
|
||||||
|
return playerInventory.AddItem(itemInstance);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1 +0,0 @@
|
|||||||
uid://b7vlkecrn0t5c
|
|
||||||
@@ -25,6 +25,7 @@ public partial class InventoryUi : Control
|
|||||||
PopulateSlots();
|
PopulateSlots();
|
||||||
SetSlotContent();
|
SetSlotContent();
|
||||||
SetSlotSelectPosition();
|
SetSlotSelectPosition();
|
||||||
|
InventoryManager.Instance.playerInventory.InventoryContentsChanged += SetSlotContent;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void _ExitTree()
|
public override void _ExitTree()
|
||||||
@@ -42,6 +43,12 @@ public partial class InventoryUi : Control
|
|||||||
uiSlot!.nameLabel.Text = inventorySlot.itemInstance?.blueprint.name ?? "";
|
uiSlot!.nameLabel.Text = inventorySlot.itemInstance?.blueprint.name ?? "";
|
||||||
uiSlot!.nameLabel.LabelSettings = uiSlot!.nameLabel.LabelSettings.Duplicate() as LabelSettings;
|
uiSlot!.nameLabel.LabelSettings = uiSlot!.nameLabel.LabelSettings.Duplicate() as LabelSettings;
|
||||||
uiSlot!.nameLabel.LabelSettings!.FontColor = inventorySlot.itemInstance?.blueprint.color ?? Colors.White;
|
uiSlot!.nameLabel.LabelSettings!.FontColor = inventorySlot.itemInstance?.blueprint.color ?? Colors.White;
|
||||||
|
|
||||||
|
var amountText = inventorySlot.itemInstance != null &&
|
||||||
|
inventorySlot.itemInstance.amount != 1
|
||||||
|
? inventorySlot.itemInstance.amount.ToString()
|
||||||
|
: "";
|
||||||
|
uiSlot!.amountLabel.Text = amountText;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,7 +95,7 @@ public partial class InventoryUi : Control
|
|||||||
var destinationSlot = index;
|
var destinationSlot = index;
|
||||||
InventoryManager.Instance.MoveItem(_playerInventory, sourceSlot, _playerInventory, destinationSlot);
|
InventoryManager.Instance.MoveItem(_playerInventory, sourceSlot, _playerInventory, destinationSlot);
|
||||||
_slotOnMouse = null;
|
_slotOnMouse = null;
|
||||||
SetSlotContent();
|
//SetSlotContent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,6 +105,7 @@ public partial class InventoryUi : Control
|
|||||||
{
|
{
|
||||||
InputInventoryOpenClose();
|
InputInventoryOpenClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Input.IsActionJustPressed("ui_inventory_disadvance"))
|
if (Input.IsActionJustPressed("ui_inventory_disadvance"))
|
||||||
{
|
{
|
||||||
_selectedSlot++;
|
_selectedSlot++;
|
||||||
@@ -105,7 +113,8 @@ public partial class InventoryUi : Control
|
|||||||
_selectedSlot = 0;
|
_selectedSlot = 0;
|
||||||
SetSlotSelectPosition();
|
SetSlotSelectPosition();
|
||||||
}
|
}
|
||||||
if(Input.IsActionJustPressed("ui_inventory_advance"))
|
|
||||||
|
if (Input.IsActionJustPressed("ui_inventory_advance"))
|
||||||
{
|
{
|
||||||
_selectedSlot--;
|
_selectedSlot--;
|
||||||
if (_selectedSlot < 0)
|
if (_selectedSlot < 0)
|
||||||
@@ -142,4 +151,4 @@ public partial class InventoryUi : Control
|
|||||||
_slotOnMouse = null;
|
_slotOnMouse = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://hg7jay2kt441
|
||||||
@@ -3,4 +3,14 @@
|
|||||||
public class ItemInstance
|
public class ItemInstance
|
||||||
{
|
{
|
||||||
public ItemResource blueprint;
|
public ItemResource blueprint;
|
||||||
|
public int amount = 1;
|
||||||
|
|
||||||
|
public ItemInstance Clone()
|
||||||
|
{
|
||||||
|
return new ItemInstance
|
||||||
|
{
|
||||||
|
blueprint = blueprint,
|
||||||
|
amount = amount
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
using Godot;
|
||||||
|
namespace Babushka.scripts.CSharp.Common.Inventory;
|
||||||
|
|
||||||
|
public partial class ItemOnGround : Node3D
|
||||||
|
{
|
||||||
|
private ItemInstance _itemInstance;
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
private bool _infiniteSupply = false;
|
||||||
|
|
||||||
|
private Label3D _itemLabel => GetNode<Label3D>("ItemLabel");
|
||||||
|
private Label3D _pickupErrorLabel => GetNode<Label3D>("PickupErrorLabel");
|
||||||
|
|
||||||
|
public ItemInstance itemInstance
|
||||||
|
{
|
||||||
|
get => _itemInstance;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_itemInstance = value;
|
||||||
|
UpdateVisuals();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void TryPickUp()
|
||||||
|
{
|
||||||
|
GD.Print("Trying to pick up item");
|
||||||
|
|
||||||
|
var result = InventoryManager.Instance.CollectItem(itemInstance.Clone());
|
||||||
|
if (result == InventoryActionResult.Success)
|
||||||
|
{
|
||||||
|
if (!_infiniteSupply)
|
||||||
|
{
|
||||||
|
QueueFree();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_pickupErrorLabel.Text = "Inventory Full";
|
||||||
|
var tween = GetTree().CreateTween();
|
||||||
|
tween.TweenInterval(2);
|
||||||
|
tween.TweenCallback(Callable.From(() => _pickupErrorLabel.Text = ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void UpdateVisuals()
|
||||||
|
{
|
||||||
|
_itemLabel.Text = itemInstance.blueprint?.name ?? "Error Item";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://udhigottc8rg
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#nullable enable
|
||||||
|
using Godot;
|
||||||
|
namespace Babushka.scripts.CSharp.Common.Inventory;
|
||||||
|
|
||||||
|
public partial class ItemOnGroundSpawnWith : Node
|
||||||
|
{
|
||||||
|
[Export] private ItemResource? _blueprint = null;
|
||||||
|
|
||||||
|
public override void _EnterTree()
|
||||||
|
{
|
||||||
|
if(_blueprint == null) return;
|
||||||
|
|
||||||
|
var parent = GetParent<ItemOnGround>();
|
||||||
|
parent.itemInstance = new ItemInstance { blueprint = _blueprint };
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
uid://c8suoi3i6kqai
|
||||||
@@ -2,17 +2,21 @@
|
|||||||
namespace Babushka.scripts.CSharp.Common.Inventory;
|
namespace Babushka.scripts.CSharp.Common.Inventory;
|
||||||
|
|
||||||
[GlobalClass]
|
[GlobalClass]
|
||||||
public partial class ItemResource: Resource
|
public partial class ItemResource : Resource
|
||||||
{
|
{
|
||||||
[Export]
|
[Export]
|
||||||
public string name;
|
public string name;
|
||||||
|
|
||||||
[Export]
|
[Export]
|
||||||
public Color color;
|
public Color color;
|
||||||
|
|
||||||
|
[Export]
|
||||||
|
public int maxStack;
|
||||||
|
|
||||||
public ItemResource()
|
public ItemResource()
|
||||||
{
|
{
|
||||||
name = "";
|
name = "";
|
||||||
color = Colors.Red;
|
color = Colors.Red;
|
||||||
|
maxStack = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,12 +7,14 @@ public partial class SlotUi : Control
|
|||||||
{
|
{
|
||||||
public Label nameLabel;
|
public Label nameLabel;
|
||||||
public int index;
|
public int index;
|
||||||
|
public Label amountLabel;
|
||||||
|
|
||||||
[Signal] public delegate void ClickedEventHandler(int index);
|
[Signal] public delegate void ClickedEventHandler(int index);
|
||||||
|
|
||||||
public override void _EnterTree()
|
public override void _EnterTree()
|
||||||
{
|
{
|
||||||
nameLabel = GetNode<Label>("NameLabel");
|
nameLabel = GetNode<Label>("NameLabel");
|
||||||
|
amountLabel = GetNode<Label>("AmountLabel");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void _on_gui_input(InputEvent ev)
|
public void _on_gui_input(InputEvent ev)
|
||||||
|
|||||||
Reference in New Issue
Block a user