106 lines
3.7 KiB
C#
106 lines
3.7 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Unity.VisualScripting;
|
|
using UnityEngine;
|
|
using UnityEngine.Animations;
|
|
using UnityEngine.UIElements;
|
|
|
|
//* General Comments or Finished Tasks
|
|
//TODO Tasks left to be done for game
|
|
//! Bugs or Issues
|
|
//? Questions or Suggestions
|
|
|
|
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 |