using System; using System.Collections; using UnityEngine; //Thomas09 public class ThrowableController : MonoBehaviour { internal event Action OnThrow; private Animator anim; private Weapon throwable; private Camera playerCamera; private bool canThrow = false; [SerializeField] private Transform throwableHolder; private GameObject throwablePrefab; private Vector3 grenadeScale = new Vector3(1.5f, 1.5f, 1.5f); private float refAimVelocity; private void Awake() { throwable = OnDemandLoader.Load("config/" + int.Parse(this.gameObject.name)); throwablePrefab = OnDemandLoader.Load("projectiles/" + throwable.projectile); playerCamera = Player.Instance.transform.Find("FirstPersonCamera_Holder").GetComponentInChildren(); anim = GetComponent(); } private void OnEnable() { StartCoroutine(CanThrow()); StartCoroutine(Player.Instance.EquipWeaponCoroutine(throwable, anim)); Player.Instance.GetInputHandler().AimKeyPressed = false; Player.Instance.GetInputHandler().ToggleAiming = false; } private void Update() { playerCamera.fieldOfView = Mathf.SmoothDamp(playerCamera.fieldOfView, 60f, ref refAimVelocity, 0.1f); if (Player.Instance.updatePlayer) { if (canThrow && Player.Instance.GetInputHandler().FireKeyPressed) { anim.SetBool("ThrowGrenade", true); } RunState(); } CrosshairManager.Instance.SetDynamicCrossHair(0, 0, 0, 0, Player.Instance, WeaponCrosshairType.No_Reticle); } private void RunState() { anim.SetBool("Run", Player.Instance.CanPlayRunningEvents()); } private IEnumerator CanThrow() { canThrow = false; yield return new WaitForSeconds(throwable.equipDuration); canThrow = true; } public void Throw() //used in animation event { GameObject instantiatedObj = Instantiate(throwablePrefab, throwableHolder.position, Quaternion.identity, null); Projectile thrownObj = instantiatedObj.GetComponent(); instantiatedObj.transform.localScale = grenadeScale; thrownObj.rotatable = true; thrownObj.ownedByMainPlayer = true; thrownObj.direction = transform.forward; OnThrow?.Invoke(throwable); PacketManager.sendThrowItem(transform.forward.x, transform.forward.y, transform.forward.z); } }