using System.Collections; using UnityEngine; /// /// Manages resource production, and serves as a countdown to leave a resource on the ground /// public class ResourceMaker : MonoBehaviour { [SerializeField] private Enum.ResourceChoice _resourceChoice; private ResourceManager _resourceManagerInstance; [SerializeField] private bool _animate = true; [SerializeField] private Vector2 _endPosition; private Vector2 _startPosition; private Rigidbody2D _rigidbody; private float _desiredTime = 1.5f; private float _timePassed = 0f; private bool _isPlaying = false; public Enum.ResourceChoice ResourceChoice => _resourceChoice; private void Start() { _resourceManagerInstance = ResourceManager.Instance; if (!_animate) return; _startPosition = transform.position; transform.position = new Vector2(transform.position.x, transform.position.y + 0.5f); _rigidbody = GetComponent(); _rigidbody.AddForce(transform.up * 20.0f); _rigidbody.gravityScale = 0.1f; } /// /// Depending on the resource choice, chooses the prefab it should instantiate /// private void Update() { if (!_animate) return; if (Vector2.Distance(transform.position, _startPosition) < 0.01f) { _rigidbody.gravityScale = 0.0f; _rigidbody.velocity = Vector2.zero; } if (_isPlaying) { var amount = GlobalConfig.Instance.Current.harvestAmount; _timePassed += Time.deltaTime; float duration = _timePassed / _desiredTime; duration = duration * duration * (3.0f - 2.0f * duration); transform.position = Vector2.Lerp(transform.position, _endPosition, duration); if(Vector2.Distance(transform.position,_endPosition) < 0.001f) { _isPlaying = false; AddResourceToInventory(amount); Destroy(gameObject); } } } public void AddResourceToInventory(int amount) { switch (_resourceChoice) { case Enum.ResourceChoice.Rock: _resourceManagerInstance.RockAmount += amount; break; case Enum.ResourceChoice.Wood: _resourceManagerInstance.WoodAmount += amount; break; case Enum.ResourceChoice.Food: _resourceManagerInstance.FoodAmount += amount; break; } } public void ClickOnResource() { if (!_rigidbody) return; _isPlaying = true; _rigidbody.gravityScale = 0.0f; _rigidbody.velocity = Vector2.zero; } }