Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using System;
- public class PlayerInteraction : MonoBehaviour
- {
- public float speed = 10;
- public bool canHold = true;
- public Transform guide;
- [SerializeField] LayerMask interactionLayers = ~0;
- private GameObject pickUpAble;
- private Interactable interactable;
- private RaycastHit hit;
- private bool placeAbleBarrelHeld;
- void Update()
- {
- HandleInput();
- HandleRaycasting();
- if (!canHold && pickUpAble)
- {
- pickUpAble.transform.position = guide.position;
- pickUpAble.transform.RotateAround(guide.position, guide.right, 100 * Input.GetAxis("Mouse ScrollWheel"));
- }
- }
- private void HandleInput()
- {
- if (Input.GetMouseButtonDown(0))
- {
- if (!canHold)
- Throw();
- else
- Pickup();
- }
- if (Input.GetMouseButtonDown(1))
- {
- if (!canHold)
- SetDown();
- }
- if (Input.GetKeyDown(KeyCode.E))
- {
- if (interactable)
- {
- interactable.Interact();
- }
- if (!placeAbleBarrelHeld)
- {
- return;
- }
- else if (pickUpAble.GetComponent<DrinkBarrel>().CheckForSpawning())
- {
- ClearHands();
- }
- }
- }
- private void HandleRaycasting()
- {
- if (Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), out hit, 3f, interactionLayers))
- {
- if (hit.collider.GetComponentInChildren<Pickup>() || hit.transform.GetComponentInParent<Pickup>() || hit.transform.GetComponent<Pickup>())
- {
- if (!pickUpAble)
- {
- pickUpAble = hit.transform.gameObject;
- if(pickUpAble.GetComponent<DrinkBarrel>())
- {
- placeAbleBarrelHeld = true;
- }
- }
- }
- else if (canHold)
- {
- pickUpAble = null;
- }
- if (hit.collider.GetComponent<Interactable>())
- {
- interactable = hit.collider.GetComponent<Interactable>();
- }
- else
- {
- interactable = null;
- }
- }
- Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * 3f, Color.yellow);
- }
- private void ClearHands()
- {
- pickUpAble = null;
- canHold = true;
- placeAbleBarrelHeld = false;
- }
- private void SetDown()
- {
- if (!pickUpAble)
- return;
- pickUpAble.GetComponent<Rigidbody>().useGravity = true;
- pickUpAble.GetComponent<Rigidbody>().isKinematic = false;
- guide.GetChild(0).parent = null;
- ClearHands();
- }
- private void Pickup()
- {
- if (!pickUpAble)
- return;
- pickUpAble.transform.SetParent(guide);
- pickUpAble.GetComponent<Rigidbody>().useGravity = false;
- pickUpAble.GetComponent<Rigidbody>().isKinematic = true;
- pickUpAble.transform.position = guide.position;
- canHold = false;
- }
- private void Throw()
- {
- if (!pickUpAble)
- return;
- pickUpAble.GetComponent<Rigidbody>().useGravity = true;
- pickUpAble.GetComponent<Rigidbody>().isKinematic = false;
- guide.GetChild(0).gameObject.GetComponent<Rigidbody>().velocity = transform.forward * speed;
- guide.GetChild(0).parent = null;
- ClearHands();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement