Mini-Games-Game/Assets/Scripts/PickUpObject.cs

101 lines
3.6 KiB
C#
Raw Normal View History

using System;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.Animations;
using UnityEngine.UIElements;
public class PickUpObject : MonoBehaviour
{
public GameObject carryPosition; // blank object, position declares where the object will be teleported to/carried
public bool insideTrigger = false; // checks if player is inside the trigger of a pickup object
public bool playerIsCarrying = false; // checks if player is carrying an object
public GameObject nearestCarriableObject;
public GameObject previousObject; // previous object that player was carrying
public GameObject heldObject; // object that player is currently holding
public float throwForce;
/// <summary>
/// Cooldown time between picking up objects in seconds
/// </summary>
public float cooldownSeconds = 1;
public bool cooldownActive = true;
public KeyCode interactKey = KeyCode.F;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
// * Cubes are quite hot so need time to cool off
cooldownSeconds -= Time.deltaTime;
cooldownActive = cooldownSeconds > 0;
// * Old objects deserve gravity too
if(previousObject != null && previousObject.GetComponent<Rigidbody>().useGravity == false)
{
previousObject.GetComponent<Rigidbody>().useGravity = true;
}
if(insideTrigger && Input.GetKeyDown(KeyCode.F) && !cooldownActive)
{
// * Who needs gravity
nearestCarriableObject.GetComponent<Rigidbody>().useGravity = false;
playerIsCarrying = true;
heldObject = nearestCarriableObject;
cooldownSeconds = 1;
}
// * YEET
else if(playerIsCarrying && Input.GetKeyDown(KeyCode.F))
{
heldObject.GetComponent<Rigidbody>().useGravity = true;
previousObject = heldObject;
playerIsCarrying = false;
previousObject.GetComponent<Rigidbody>().AddForce(transform.forward * throwForce, ForceMode.Impulse);
Debug.Log("Yoted!");
}
// * Cubes not stored above heads are highly dangerous
if(playerIsCarrying)
{
nearestCarriableObject.transform.position = carryPosition.transform.position;
nearestCarriableObject.transform.rotation = carryPosition.transform.rotation;
}
}
// Called when the player is inside a trigger tagged as PickupObject
void OnTriggerStay(Collider otherObject)
{
if(otherObject.gameObject.tag == "PickupObject" && !cooldownActive)
{
nearestCarriableObject = otherObject.gameObject;
insideTrigger = true;
// * old cube is boring
if(heldObject != null && heldObject != nearestCarriableObject && playerIsCarrying)
{
previousObject = heldObject;
cooldownSeconds = 1;
}
}
}
// If player is not inside trigger, then they probably aren't inside it
void OnTriggerExit(Collider otherObject)
{
if(otherObject.gameObject.tag == "PickupObject")
{
insideTrigger = false;
}
}
}
//! To make player launch self:
//! add public GameObject player; and place player in it fron inspector
//! in if(insiderTrigger && Input.GetKeyDown(KeyCode.F))
//! Place the code below:
//! player.GetComponent<Rigidbody>().AddForce(transform.forward * throwForce, ForceMode.Impulse);
//! Run the game and press F to launch the player