using System.Collections; using System.Collections.Generic; using UnityEngine; [RequireComponent(typeof(Rigidbody))] [RequireComponent(typeof(CapsuleCollider))] public class Projectile : MonoBehaviour { [Tooltip("The length of time before this gameobject is destroyed")] private float maximumLifeTime = 3.0f; private float destroyTime; [SerializeField] private bool isGrenade = false; [HideInInspector] public bool ownedByMainPlayer = false; [SerializeField] private bool useGravity = false; [SerializeField] private bool destroyOnImpact = true; public bool rotatable = false; [SerializeField] private float rotateSpeed; private bool isRotating = true; [HideInInspector] public Vector3 direction; [Tooltip("The speed of the projectile in m/s")] public float thrust; private Rigidbody rb; private void Awake() { rb = GetComponent(); } // Start is called before the first frame update private void Start() { destroyTime = Time.time + maximumLifeTime; rb.useGravity = useGravity; rb.mass = 0.1f; if (ownedByMainPlayer) { rb.AddForce(direction * thrust, ForceMode.Impulse); } } public void ApplyForce(Vector3 direction, float thrustMultiplier) { rb.AddForce(direction * (thrust * thrustMultiplier), ForceMode.Impulse); } private void OnTriggerEnter(Collider other) { Player p = other.gameObject.GetComponentInParent(); if (p != null) { //send packet here Debug.Log("proj hit"); PacketManager.sendProjecctileHit(gameObject.name); } // if (destroyOnImpact) // { // Destroy(gameObject); // } } void OnCollisionEnter(Collision collision) { if (rotatable) { isRotating = false; } if (destroyOnImpact) { Destroy(gameObject); } } private void Update() { if (isRotating && rotatable) { transform.Rotate(new Vector3(90, 0, 0) * rotateSpeed * Time.deltaTime, Space.Self); } if (Time.time > destroyTime) { if (isGrenade && ownedByMainPlayer) { PacketManager.sendThrowableExplosion(transform.position.x, transform.position.y, transform.position.z); Destroy(gameObject); return; } NetworkPooler.Instance.PooledDestroy("Grenade", gameObject); } } }