//Can only enter THROWMODE if picking up an object //Handle player input / transition states //E = object pickup //R = Holddown and throw //Q = Enter throwMode void Update() { //Check if fell off the boat //print(transform.position.y); if (transform.position.y < -10.0f) { transform.position = originalSpot; } Debug.DrawLine(HoldObj.pickUpLoc.transform.position, HoldObj.pickUpLoc.transform.position + HoldObj.pickUpLoc.transform.forward, Color.green); //ENTER / EXIT THROW MODE AND HOLDING OBJECT //Lookout this thing can be buggy //Throwing STUFF if (Input.GetKeyUp(/*ChuckObj */ PickUpObj) && isPickingUp) { if (PowerThrow < 1.0f) { PowerThrow += Time.deltaTime * 0.5f; } //print(PowerThrow); } //Relased throw - reset the float if (Input.GetKeyUp(PickUpObj) && isPickingUp && HoldObj.canDrop) { //PROJECTILE CODE AudioSource audio = GetComponent <AudioSource>(); audio.Play(); Rigidbody projRb = HoldObj.objectHolding.gameObject.GetComponent <Rigidbody>(); //drop object / unparent it HoldObj.DropObject(); //Vector3 throwDir = (HoldObj.pickUpLoc.transform.position + HoldObj.pickUpLoc.transform.forward); Vector3 throwDir = HoldObj.transform.forward; throwDir.y = throwDir.y + 0.5f; throwDir = throwDir.normalized; projRb.AddForce(throwDir * 800.0f); PowerThrow = 0.0f; print("POWER IS 0"); } }
public int TransportObject(InteractionObject whichObject, GameObject whichGoal, WalkToGoal walktogoal, PickUp pickup, float pickuptime, Vector3 holdpointPosition, Vector3 holdPointRotation, int cascade) { if (cascade == 0) // first communicate some basics to pickup script { pickup.SetPickUpTime(pickuptime); pickup.SetCurrentIO(whichObject); cascade++; } if (cascade == 1) // walk to the object { // public bool WalkTo(Transform CurrentGoal, bool DrawPath, float maxspeed, float mindist, float anglecut) // to check what the parameters mean bool ObjectReached = walktogoal.WalkTo(whichObject.transform, false, 0.4f, 0.2f, 120); // walk towards object to be pickup if (ObjectReached) { cascade++; } } if (cascade == 2) // pick it up { pickup.SetHoldPoint(holdpointPosition, holdPointRotation); // tell script how to hold this object. This is somehow overwritten if in cascade==0. Here it is called multiple times, but it's computationally light so that's ok float pickedup = pickup.PickUpObject(whichObject); // returns value from 0 to 1 indicating when it has picked up the object if (pickedup > 0.50) { cascade++; } // start walking towards goal before reaching 1, that is before object is perfectly in place. This gives a more fluent movement. } if (cascade == 3) // walk to the goal { bool GoalReached = walktogoal.WalkTo(whichGoal.transform, false, 0.4f, 0.2f, 120); if (GoalReached) { cascade++; } } if (cascade == 4) // drop object { float dropped = pickup.DropObject(whichGoal.transform); if (dropped > 0.99f) { pickup.LetGo(); cascade++; } } return(cascade); }