using SHADE; using System; using static PlayerController; public class PickAndThrow : Script { public Vector3 holdPosition = new Vector3(0.0f, 1.0f, 0.0f); public Vector3 throwForce = new Vector3(100.0f, 200.0f, 100.0f); public GameObject item; private PlayerController pc; private Camera cam; private Transform itemTransform; private RigidBody itemRidibody; private Transform raccoonHoldLocation; private float lastXDir; private float lastZDir; private bool inRange = false; public PickAndThrow(GameObject gameObj) : base(gameObj) { } protected override void awake() { pc = GetScript(); raccoonHoldLocation = GetComponentInChildren(); if (raccoonHoldLocation == null) Debug.Log("CHILD EMPTY"); else raccoonHoldLocation.LocalPosition = holdPosition; } protected override void update() { if (cam == null) cam = GetComponentInChildren(); else if (cam != null) { Vector3 camerAixs = cam.GetForward(); camerAixs.y = 0; camerAixs.Normalise(); lastXDir = camerAixs.x; lastZDir = camerAixs.z; } RetrieveItemComponets(); if (pc != null && inRange && !pc.holdItem && Input.GetMouseButtonDown(Input.MouseCode.LeftButton)) pc.holdItem = true; if (pc != null && pc.holdItem && itemRidibody != null && itemTransform != null) { itemTransform.LocalPosition = raccoonHoldLocation.GlobalPosition; itemRidibody.IsGravityEnabled = false; itemRidibody.LinearVelocity = Vector3.Zero; itemRidibody.AngularVelocity = Vector3.Zero; if (Input.GetMouseButtonDown(Input.MouseCode.LeftButton)) { pc.holdItem = false; inRange = false; itemRidibody.IsGravityEnabled = true; itemRidibody.AddForce(new Vector3(throwForce.x * lastXDir, throwForce.y, throwForce.z * lastZDir)); itemRidibody.LinearVelocity += pc.rb.LinearVelocity; } } else if(!pc.holdItem && itemRidibody != null) itemRidibody.IsGravityEnabled = true; } private void ResetItemObject() { itemRidibody = null; itemTransform = null; item = new GameObject(); } private void RetrieveItemComponets() { //get the transform of the given item if (item.GetScript() != null && itemTransform == null && itemRidibody == null) { itemTransform = item.GetComponent(); if (itemTransform == null) Debug.Log("Item transform EMPTY"); itemRidibody = item.GetComponent(); if (itemRidibody == null) Debug.Log("Item rb EMPTY"); } } protected override void onCollisionEnter(CollisionInfo info) { } protected override void onTriggerEnter(CollisionInfo info) { //Debug.Log("ENTER"); if (info.GameObject.GetScript() != null && !pc.holdItem) { item = info.GameObject; inRange = true; } } protected override void onTriggerStay(CollisionInfo info) { //Debug.Log("STAY"); } protected override void onTriggerExit(CollisionInfo info) { //Debug.Log("EXIT"); if (info.GameObject.GetScript() != null && !pc.holdItem) { inRange = false; } } }