using System.Linq; using Managers; using UnityEngine; public class CropInteractiveComponent : InteractiveComponent { // Crop state public int isWatered; public CropInteractable interactable; private void Start() { DayNightCycleManager.OnDayChange += OnDayChange; // attach the crop handler to the crop interactable // create crop handler gameObject.AddComponent(); // attach to this gameobject as its parent // cropHandler.transform.parent = transform; // set to first growth stage as seed /*interactable.currentGrowthStage = 1;*/ // set the crop sprite spriteRenderer.sprite = interactable.growthSprites[0]; } private void OnDestroy() { DayNightCycleManager.OnDayChange -= OnDayChange; } public void Harvest() { if (interactable != null && interactable.cropItem != null && interactable.IsHarvestable()) { Debug.Log("Harvesting Crop:" + interactable.cropItem.itemName); // add crop to inventory var item = Instantiate(interactable.cropItem); PlayerManager.Instance.AddItemToInventorySlot(item); // remove crop from tile interactable = null; // delete visual Destroy(gameObject); } else { Debug.Log("Crop is null or not harvestable"); } } public void Water() { // Water the crop Debug.Log("Watering Crop"); interactable.isWatered = true; } public void SetCrop(CropInteractable tileCropInteractable) { interactable = tileCropInteractable; // change the crop sprite // change the crop material if (spriteRenderer != null && interactable != null) { Debug.Log("CROP: SetCrop: " + interactable.name + " Growth Stage: " + interactable.currentGrowthStage); spriteRenderer.sprite = interactable.growthSprites[interactable.currentGrowthStage - 1]; } } public override void Interact() { Debug.Log("Crop Interact"); // check what tool the player has equipped var activeToolbarSlot = PlayerManager.Instance.GetActiveToolbarSlot(); if (activeToolbarSlot == null) { // chgeck if tool is required if (interactable.IsToolRequired()) { Debug.Log("Tool is required"); return; } if (interactable.IsHarvestable()) Harvest(); } // check if the item in the slot is a ToolItem if (activeToolbarSlot.item is ToolItem tool) // check if the toolType is in the list from the crop if (interactable.validToolTypes.Contains(tool.toolType)) { // check what tool it is and what action to take water or harvest if (tool.toolType == ToolItem.ToolType.Watering) { Water(); return; } if (tool.toolType == ToolItem.ToolType.Harvesting) if (interactable.IsHarvestable()) Harvest(); if (tool.toolType == ToolItem.ToolType.Mining) { // destroy crop interactable = null; Destroy(gameObject); } } if (interactable == null) Debug.Log("Crop is null"); } public void ChangeSprite(int stage) { if (interactable != null) { Debug.Log("Crop InteractiveComponent ChangeSprite"); spriteRenderer.sprite = interactable.growthSprites[stage]; } } public void OnDayChange() { if (interactable != null) { Debug.Log("Crop InteractiveComponent OnDayChange"); interactable.OnDayChange(); if (spriteRenderer == null) spriteRenderer = GetComponent(); if (spriteRenderer != null) { Debug.Log("Crop sprite renderer is not null Stage:" + interactable.currentGrowthStage); var currStage = interactable.currentGrowthStage - 1; Debug.Log("Crop sprite renderer is not null currStage:" + currStage); if (currStage < 0) currStage = 0; ChangeSprite(currStage); } else { Debug.Log("Crop sprite renderer is null"); } } else { Debug.Log("Crop interactable is null"); } } public void Initialize() { var cropInteractable = Instantiate(interactable); SetCrop(cropInteractable); // set position to center of tile } }