WeaponPickDropSystem | Fep

PHOTO EMBED

Wed May 04 2022 17:50:31 GMT+0000 (Coordinated Universal Time)

Saved by @BiscuitTinx #c#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PickUpController : MonoBehaviour
{
    public ProjectileGun gunScript;
    public Grappling grapplingScript;  
    public Rigidbody rb;
    public BoxCollider coll;
    public Transform player, gunContainer, fpsCam;

    public float pickUpRange;
    public float dropForwardForce, dropUpwardForce;

    public bool equipped;
    public static bool slotFull;

    public bool grappleGun;

    private void Start()
    {
        // Setup
        if (!equipped)
        {
            gunScript.enabled = false;
            if (grappleGun) grapplingScript.enabled = false;
            rb.isKinematic = false;
            coll.isTrigger = false;
        }

        if (equipped)
        {
            gunScript.enabled = true;
            if (grappleGun) grapplingScript.enabled = true;
            rb.isKinematic = true;
            coll.isTrigger = true;
            slotFull = true;
        }
    }

    private void Update()
    {
        // Check if player is in range and "E" is pressed
        Vector3 distanceToPlayer = player.position - transform.position;
        if (!equipped && distanceToPlayer.magnitude <= pickUpRange && Input.GetKeyDown(KeyCode.E) && !slotFull)
        {
            PickUp();
        }

        // Drop if equipped and "Q" is pressed
        if (equipped && Input.GetKeyDown(KeyCode.Q))
        {
            Drop();
        }
    }

    private void PickUp()
    {
        equipped = true;
        slotFull = true;

        // Make weapon a child of the camera and move it to default position
        transform.SetParent(gunContainer);
        // use these if the orignal model is perfect shape default
        transform.localPosition = Vector3.zero;
        transform.localRotation = Quaternion.Euler(0, 180, 0);
        // For the local scale dont use unless the actual model size in project is exactly 1
        //transform.localScale = Vector3.zero;


        // Make Rigidbody Kinematic and BoxCollider a trigger s
        rb.isKinematic = true;
        coll.isTrigger = true;

        // Enable script 
        gunScript.enabled = true;
        if (grappleGun) grapplingScript.enabled = true;
    }

    private void Drop()
    {
        equipped = false;
        slotFull = false;

        // Set parent to null 
        transform.SetParent(null);

        // Make Rigidbody Kinematic and BoxCollider normal 
        rb.isKinematic = false;
        coll.isTrigger = false;

        // Gun carries momentum of player
        rb.velocity = player.GetComponent<Rigidbody>().velocity;

        // AddForce
        rb.AddForce(fpsCam.forward * dropForwardForce, ForceMode.Impulse);
        rb.AddForce(fpsCam.up * dropUpwardForce, ForceMode.Impulse);
        // Add random rotation
        float random = Random.Range(-1f, 1f);
        rb.AddTorque(new Vector3(random, random, random) * 10);

        // Disable script 
        gunScript.enabled = false;
        if (grappleGun) grapplingScript.enabled = false;
    }
}
content_copyCOPY