From 65d8be6cf212806d1e38dfc3ed819aa272a1b3bc Mon Sep 17 00:00:00 2001 From: Michal Pikulski Date: Thu, 4 Sep 2025 00:14:31 +0200 Subject: [PATCH] Pulver correctly goes and retrieves the item. Items still need to be enabled again after a failed couroutine --- .../Prefabs/Characters/PulverCharacter.prefab | 162 ++++++++++++++++++ Assets/Scenes/AppleHillsOverworld.unity | 87 +--------- Assets/Scripts/FollowerController.cs | 38 ++++ Assets/Scripts/Pickup.cs | 1 - 4 files changed, 203 insertions(+), 85 deletions(-) diff --git a/Assets/Prefabs/Characters/PulverCharacter.prefab b/Assets/Prefabs/Characters/PulverCharacter.prefab index a2922499..83a8f049 100644 --- a/Assets/Prefabs/Characters/PulverCharacter.prefab +++ b/Assets/Prefabs/Characters/PulverCharacter.prefab @@ -11,6 +11,8 @@ GameObject: - component: {fileID: 2264394306674147778} - component: {fileID: 216298859848564559} - component: {fileID: 3435632802124758411} + - component: {fileID: 8947209170748834035} + - component: {fileID: 7852204877518954380} m_Layer: 8 m_Name: PulverCharacter m_TagString: Pulver @@ -32,6 +34,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 6418503932309983819} + - {fileID: 1711935362349191901} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!70 &216298859848564559 @@ -92,6 +95,165 @@ MonoBehaviour: thresholdFar: 7 thresholdNear: 5 stopThreshold: 0.5 + currentlyHeldItem: {fileID: 0} + heldObjectRenderer: {fileID: 2099200424669714683} +--- !u!114 &8947209170748834035 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102400833121127473} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 373b52eb9bf8c40f785bb6947a1aee66, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 1 + drawGizmos: 1 + detailedGizmos: 0 + startEndModifier: + addPoints: 0 + exactStartPoint: 3 + exactEndPoint: 3 + useRaycasting: 0 + mask: + serializedVersion: 2 + m_Bits: 4294967295 + useGraphRaycasting: 0 + traversableTags: -1 + tagPenalties: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + graphMask: + value: -1 +--- !u!114 &7852204877518954380 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1102400833121127473} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f6eb1402c17e84a9282a7f0f62eb584f, type: 3} + m_Name: + m_EditorClassIdentifier: + version: 5 + radius: 2 + height: 2 + canMove: 1 + maxSpeed: 15 + gravity: {x: NaN, y: NaN, z: NaN} + groundMask: + serializedVersion: 2 + m_Bits: 4294967295 + centerOffsetCompatibility: NaN + repathRateCompatibility: NaN + canSearchCompability: 0 + orientation: 1 + enableRotation: 0 + autoRepath: + mode: 2 + interval: 0.5 + sensitivity: 10 + maximumInterval: 2 + visualizeSensitivity: 0 + targetCompatibility: {fileID: 0} + maxAcceleration: -2.5 + rotationSpeed: 360 + slowdownDistance: 3 + pickNextWaypointDist: 2 + endReachedDistance: 0.5 + alwaysDrawGizmos: 0 + slowWhenNotFacingTarget: 1 + whenCloseToDestination: 0 + constrainInsideGraph: 0 +--- !u!1 &5934518940303293264 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1711935362349191901} + - component: {fileID: 2099200424669714683} + m_Layer: 8 + m_Name: HeldObject + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1711935362349191901 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5934518940303293264} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: -1.23, y: -0.36, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 2264394306674147778} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &2099200424669714683 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5934518940303293264} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 2 + m_Sprite: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1.58, y: 3.16} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 0 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 --- !u!1001 &403634400421951211 PrefabInstance: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/AppleHillsOverworld.unity b/Assets/Scenes/AppleHillsOverworld.unity index 105ba5bf..a7b6cf74 100644 --- a/Assets/Scenes/AppleHillsOverworld.unity +++ b/Assets/Scenes/AppleHillsOverworld.unity @@ -488,81 +488,6 @@ PrefabInstance: m_AddedGameObjects: [] m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: b5fc01af35233eb4cbeede05e50a7c34, type: 3} ---- !u!1 &416453392 stripped -GameObject: - m_CorrespondingSourceObject: {fileID: 1102400833121127473, guid: 8ac0210dbf9d7754e9526d6d5c214f49, type: 3} - m_PrefabInstance: {fileID: 1950557796102186365} - m_PrefabAsset: {fileID: 0} ---- !u!114 &416453396 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 416453392} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: f6eb1402c17e84a9282a7f0f62eb584f, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 5 - radius: 2 - height: 2 - canMove: 1 - maxSpeed: 15 - gravity: {x: NaN, y: NaN, z: NaN} - groundMask: - serializedVersion: 2 - m_Bits: 4294967295 - centerOffsetCompatibility: NaN - repathRateCompatibility: NaN - canSearchCompability: 0 - orientation: 1 - enableRotation: 0 - autoRepath: - mode: 2 - interval: 0.5 - sensitivity: 10 - maximumInterval: 2 - visualizeSensitivity: 0 - targetCompatibility: {fileID: 0} - maxAcceleration: -2.5 - rotationSpeed: 360 - slowdownDistance: 3 - pickNextWaypointDist: 2 - endReachedDistance: 0.5 - alwaysDrawGizmos: 0 - slowWhenNotFacingTarget: 1 - whenCloseToDestination: 0 - constrainInsideGraph: 0 ---- !u!114 &416453397 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 416453392} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 373b52eb9bf8c40f785bb6947a1aee66, type: 3} - m_Name: - m_EditorClassIdentifier: - version: 1 - drawGizmos: 1 - detailedGizmos: 0 - startEndModifier: - addPoints: 0 - exactStartPoint: 3 - exactEndPoint: 3 - useRaycasting: 0 - mask: - serializedVersion: 2 - m_Bits: 4294967295 - useGraphRaycasting: 0 - traversableTags: -1 - tagPenalties: 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - graphMask: - value: -1 --- !u!1001 &448642088 PrefabInstance: m_ObjectHideFlags: 0 @@ -23082,11 +23007,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 2264394306674147778, guid: 8ac0210dbf9d7754e9526d6d5c214f49, type: 3} propertyPath: m_LocalPosition.x - value: -5.35 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2264394306674147778, guid: 8ac0210dbf9d7754e9526d6d5c214f49, type: 3} propertyPath: m_LocalPosition.y - value: -6.16 + value: 0 objectReference: {fileID: 0} - target: {fileID: 2264394306674147778, guid: 8ac0210dbf9d7754e9526d6d5c214f49, type: 3} propertyPath: m_LocalPosition.z @@ -23123,13 +23048,7 @@ PrefabInstance: m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] - m_AddedComponents: - - targetCorrespondingSourceObject: {fileID: 1102400833121127473, guid: 8ac0210dbf9d7754e9526d6d5c214f49, type: 3} - insertIndex: -1 - addedObject: {fileID: 416453397} - - targetCorrespondingSourceObject: {fileID: 1102400833121127473, guid: 8ac0210dbf9d7754e9526d6d5c214f49, type: 3} - insertIndex: -1 - addedObject: {fileID: 416453396} + m_AddedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 8ac0210dbf9d7754e9526d6d5c214f49, type: 3} --- !u!1001 &8865498003578620591 PrefabInstance: diff --git a/Assets/Scripts/FollowerController.cs b/Assets/Scripts/FollowerController.cs index 9f43182c..b73f0b4b 100644 --- a/Assets/Scripts/FollowerController.cs +++ b/Assets/Scripts/FollowerController.cs @@ -34,6 +34,10 @@ public class FollowerController : MonoBehaviour private Animator animator; private Transform artTransform; + [Header("Held Item")] + public PickupItemData currentlyHeldItem; + public SpriteRenderer heldObjectRenderer; + void Awake() { aiPath = GetComponent(); @@ -224,6 +228,24 @@ public class FollowerController : MonoBehaviour pickupCoroutine = StartCoroutine(PickupSequence(itemPosition, playerTransform)); } + public void SetHeldItem(PickupItemData itemData) + { + currentlyHeldItem = itemData; + if (heldObjectRenderer != null) + { + if (currentlyHeldItem != null && currentlyHeldItem.mapSprite != null) + { + heldObjectRenderer.sprite = currentlyHeldItem.mapSprite; + heldObjectRenderer.enabled = true; + } + else + { + heldObjectRenderer.sprite = null; + heldObjectRenderer.enabled = false; + } + } + } + private System.Collections.IEnumerator PickupSequence(Vector2 itemPosition, Transform playerTransform) { isManualFollowing = false; @@ -239,6 +261,22 @@ public class FollowerController : MonoBehaviour yield return null; } OnPickupArrived?.Invoke(); + // Set held item and destroy pickup + if (heldObjectRenderer != null) + { + // Find Pickup object at itemPosition + Collider2D[] hits = Physics2D.OverlapCircleAll(itemPosition, 0.2f); + foreach (var hit in hits) + { + var pickup = hit.GetComponent(); + if (pickup != null) + { + SetHeldItem(pickup.itemData); + GameObject.Destroy(pickup.gameObject); + break; + } + } + } // Wait briefly, then return to player yield return new WaitForSeconds(0.2f); if (aiPath != null && playerTransform != null) diff --git a/Assets/Scripts/Pickup.cs b/Assets/Scripts/Pickup.cs index fae51e7b..4562ff54 100644 --- a/Assets/Scripts/Pickup.cs +++ b/Assets/Scripts/Pickup.cs @@ -113,7 +113,6 @@ public class Pickup : MonoBehaviour { followerController.OnPickupReturned -= OnFollowerReturned; pickupInProgress = false; - Destroy(gameObject); } playerController.OnArrivedAtTarget += OnPlayerArrived; Vector3 stopPoint = transform.position + (playerObj.transform.position - transform.position).normalized * playerStopDistance;