Exemplo n.º 1
0
    //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");
        }
    }
Exemplo n.º 2
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);
    }