using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(Rigidbody))] [RequireComponent(typeof(Burnable))] public class Item : MonoBehaviour { public Transform IgnitePoint; public BurnQuality Quality { get { return Burnable.Quality; } } [Header("Runtime values")] public bool Grabbed = false; private Burnable Burnable; private Rigidbody Body; private Transform World; private bool BeingPlaced = false; private Vector3 TargetPosition; private Vector3 GrabOffset; private Quaternion GrabRotation; private void Awake() { Burnable = GetComponent(); Body = GetComponent(); World = GameObject.FindGameObjectWithTag("World").transform; } private void Update() { if (Grabbed) { transform.localPosition = Vector3.Lerp(transform.localPosition, GrabOffset, 10f * Time.deltaTime); transform.localRotation = Quaternion.Slerp(transform.localRotation, GrabRotation, 10f * Time.deltaTime); } else if (BeingPlaced) { // Lerp to TargetPosition, then continue simulation Vector3 Delta = TargetPosition - transform.position; float Diff = Delta.magnitude; if (Diff < 0.1f) { transform.position = TargetPosition; Body.isKinematic = false; BeingPlaced = false; } else { transform.position = Vector3.Lerp(transform.position, TargetPosition, 20f * Time.deltaTime); } } } public void PickUp(Transform handTransform) { transform.parent = handTransform; GrabOffset = new Vector3(Random.value - 0.5f, Random.value - 0.5f, Random.value - 0.5f) * 0.15f; Vector3 DirectionOffset = new Vector3(Random.value - 0.5f, Random.value - 0.5f, 0) * 0.8f; GrabRotation = Quaternion.LookRotation(Vector3.down, (Vector3.forward + DirectionOffset).normalized); Body.isKinematic = true; Grabbed = true; } public void Drop(Vector3 where) { transform.parent = World; TargetPosition = where; BeingPlaced = true; Grabbed = false; } }