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
//! Somtimes boxes get thrown further than other times. Boxes also sometimes get thrown into random directions.
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;
///
/// Cooldown time between picking up objects in seconds
///
public float cooldownSeconds = 1;
public bool cooldownActive = true;
public KeyCode interactKey = KeyCode.F;
// 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().useGravity == false)
{
previousObject.GetComponent().useGravity = true;
}
if(insideTrigger && Input.GetKeyDown(KeyCode.F) && !cooldownActive)
{
// * Who needs gravity
nearestCarriableObject.GetComponent().useGravity = false;
playerIsCarrying = true;
heldObject = nearestCarriableObject;
cooldownSeconds = 1;
}
// * YEET
else if(playerIsCarrying && Input.GetKeyDown(KeyCode.F))
{
heldObject.GetComponent().useGravity = true;
previousObject = heldObject;
playerIsCarrying = false;
previousObject.GetComponent().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().AddForce(transform.forward * throwForce, ForceMode.Impulse);
//! Run the game and press F to launch the player