76 lines
2.5 KiB
C#
76 lines
2.5 KiB
C#
using System;
|
|
using System.Collections;
|
|
using UnityEngine;
|
|
|
|
//Thomas09
|
|
public class ThrowableController : MonoBehaviour
|
|
{
|
|
internal event Action<Weapon> 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<Weapon>("config/" + int.Parse(this.gameObject.name));
|
|
throwablePrefab = OnDemandLoader.Load<GameObject>("projectiles/" + throwable.projectile);
|
|
playerCamera = Player.Instance.transform.Find("FirstPersonCamera_Holder").GetComponentInChildren<Camera>();
|
|
anim = GetComponent<Animator>();
|
|
}
|
|
|
|
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<Projectile>();
|
|
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);
|
|
}
|
|
}
|