// Bloco de funcoes referentes ao lancamento de objetos
    public void LiftObject(GameObject liftedObject)
    {
        currentObject            = liftedObject;
        currLiftableObjectScript = currentObject.GetComponent <LiftableObject>();

        currLiftableObjectScript.Lift(holdingPosition);
    }
Example #2
0
    void LiftAndDrop()
    {
        // Lifting
        if (Input.GetMouseButtonDown(0) && !_isLifting)
        {
            Ray camRay = new Ray(_cam.transform.position, _cam.transform.forward);
            RaycastHit camRayHit;

            if (Physics.Raycast(camRay, out camRayHit, _requiredProximity))
            {
                if (camRayHit.transform.GetComponent<LiftableObject>())
                {
                    if (!camRayHit.transform.gameObject.GetComponent<LiftableObject>().isSet)
                    {
                        liftedObject = camRayHit.transform.gameObject.GetComponent<LiftableObject>();
                        liftedObject.Lift();
                        _isLifting = true;
                    }
                }
            }
        }

        // Dropping
        else if (Input.GetMouseButtonDown(0) && _isLifting)
        {
            liftedObject.Drop();
            liftedObject = null;
            _isLifting = false;
        }
    }
    public void PutDownObject()
    {
        Vector3 placingPosition = transform.position + (transform.forward * 1.5f);

        currLiftableObjectScript.PutDown(placingPosition);
        currLiftableObjectScript = null;
    }
Example #4
0
    /*  Name:			Drop()
     *  Description:	Attempts to drop an object in front of the player, if there's
     *					enough space.
     */
    private void Drop()
    {
        Vector2 dropLocation = DropPoint();

        switch (facing)
        {
        case Direction.EAST:
            dropLocation.x += actDistance;
            break;

        case Direction.WEST:
            dropLocation.x -= actDistance;
            break;

        case Direction.NORTH:
            dropLocation.y += actDistance;
            break;

        case Direction.SOUTH:
            dropLocation.y -= actDistance;
            break;
        }

        // Attempt to drop the item. If successful, the player is no longer holding the item.
        if (heldItem.OnDrop(dropLocation, facing))
        {
            heldItem = null;
        }
    }
Example #5
0
        // Funcion que pone un objeto en la mesa o llena el objecto que
        // ya se encuentra en ella
        public override bool PutDownObject(LiftableObject liftable)
        {
            if (TopObject == null)
            {
                liftable.transform.parent        = this.transform;
                liftable.transform.localPosition = liftable.Offset;
                liftable.transform.localRotation = Quaternion.Euler(0f, liftable.transform.localEulerAngles.y, 0f);
                TopObject = liftable;

                audioSource.clip = PutClip;
                audioSource.Play();

                return(true);
            }
            else if (liftable is Ingredient && TopObject is CookingPot)
            {
                bool didFill = (TopObject as CookingPot).Fill((liftable as Ingredient));
                if (didFill)
                {
                    Destroy(liftable.gameObject);
                    return(true);
                }
            }
            else if (liftable is CookingPot && TopObject is Plate)
            {
                bool didFill = (TopObject as Plate).Fill(liftable as CookingPot);
                if (didFill)
                {
                    (liftable as CookingPot).Empty();
                    return(false);
                }
            }
            return(false);
        }
Example #6
0
    public static PacketWriter RemoveCube(LiftableObject liftableObject)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.LIFTABLE);

        pWriter.Write(LiftableMode.RemoveCube);
        pWriter.WriteString($"4_{CoordB.AsHexadecimal(liftableObject.Position.ToByte())}");

        return(pWriter);
    }
Example #7
0
 public override bool PutDownObject(LiftableObject liftable)
 {
     if (liftable is Plate && (liftable as Plate).Filled)
     {
         checkOrder((liftable as Plate).Ingredients);
         Destroy(liftable.gameObject);
         return(true);
     }
     return(false);
 }
    public static PacketWriter UpdateEntityById(LiftableObject liftableObject)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.Liftable);

        pWriter.Write(LiftableMode.UpdateEntity);
        pWriter.WriteString(liftableObject.EntityId);
        pWriter.WriteByte();
        pWriter.WriteInt(liftableObject.ItemCount);
        pWriter.Write(liftableObject.State);

        return(pWriter);
    }
Example #9
0
    public static PacketWriter UpdateEntityById(LiftableObject liftableObject)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.LIFTABLE);

        pWriter.Write(LiftableMode.UpdateEntity);
        pWriter.WriteString(liftableObject.EntityId);
        pWriter.WriteByte();
        pWriter.WriteInt(liftableObject.Enabled ? 1 : 0); // 1 = enable, 0 = disable
        pWriter.Write(liftableObject.State);

        return(pWriter);
    }
Example #10
0
    public static PacketWriter UpdateEntityByCoord(LiftableObject liftableObject)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.LIFTABLE);

        pWriter.Write(LiftableMode.UpdateEntity);
        pWriter.WriteString($"4_{CoordB.AsHexadecimal(liftableObject.Position.ToByte())}");
        pWriter.WriteByte();
        pWriter.WriteInt(liftableObject.Enabled ? 1 : 0); // 1 = enable, 0 = disable
        pWriter.Write(liftableObject.State);

        return(pWriter);
    }
Example #11
0
 private void OnTriggerStay(Collider other)
 {
     if (other.gameObject.tag == "EnergySource" && blockPresent == false && !isActive)
     {
         energySourceLO = other.gameObject.GetComponent <LiftableObject>();
         if (energySourceLO.beingCarried == false)
         {
             energySource = other.gameObject;
             blockPresent = true;
             energySource.GetComponent <Rigidbody>().isKinematic = true;
         }
     }
 }
Example #12
0
 public override bool PutDownObject(LiftableObject liftable)
 {
     if (TopObject == null && liftable is CookingPot)
     {
         (liftable as CookingPot).SubscribeToStove(this);
         subscribed = true;
         return(base.PutDownObject(liftable));
     }
     else if (TopObject != null)
     {
         return(base.PutDownObject(liftable));
     }
     return(false);
 }
Example #13
0
    public static PacketWriter UpdateEntityByCoord(IFieldObject <LiftableObject> fieldLiftableObject)
    {
        LiftableObject liftableObject = fieldLiftableObject.Value;

        PacketWriter pWriter = PacketWriter.Of(SendOp.Liftable);

        pWriter.Write(LiftableMode.UpdateEntity);
        pWriter.WriteString($"4_{fieldLiftableObject.Coord.ToByte().AsHexadecimal()}");
        pWriter.WriteByte();
        pWriter.WriteInt(liftableObject.ItemCount);
        pWriter.Write(liftableObject.State);

        return(pWriter);
    }
Example #14
0
        public void spawnPlate()
        {
            LiftableObject instantiatedPlate = (Instantiate(plate, transform) as GameObject).GetComponent <LiftableObject>();

            if (TopObject != null)
            {
                instantiatedPlate.transform.localPosition = instantiatedPlate.Offset + new Vector3(0f, (plates.Count + 1) * 0.1f, 0f);
                plates.Push(instantiatedPlate);
            }
            else
            {
                TopObject = instantiatedPlate;
                instantiatedPlate.transform.localPosition = instantiatedPlate.Offset;
            }
        }
Example #15
0
    public static PacketWriter Drop(LiftableObject liftableObject)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.LIFTABLE);

        pWriter.Write(LiftableMode.Drop);
        pWriter.WriteString($"4_{CoordB.AsHexadecimal(liftableObject.Position.ToByte())}");
        pWriter.WriteInt(1);
        pWriter.WriteUnicodeString(liftableObject.EffectQuestId);
        pWriter.WriteUnicodeString(liftableObject.EffectQuestState);
        pWriter.WriteUnicodeString("0");
        pWriter.WriteUnicodeString("0");
        pWriter.WriteByte(1);

        return(pWriter);
    }
Example #16
0
 public override bool PutDownObject(LiftableObject liftable)
 {
     if (liftable is CookingPot)
     {
         (liftable as CookingPot).Empty();
     }
     else if (liftable is Plate)
     {
         (liftable as Plate).Empty();
     }
     else if (liftable is Ingredient)
     {
         Destroy(liftable.gameObject);
         return(true);
     }
     return(false);
 }
Example #17
0
    public static PacketWriter Drop(IFieldObject <LiftableObject> fieldLiftableObject)
    {
        LiftableObject liftableObject = fieldLiftableObject.Value;

        PacketWriter pWriter = PacketWriter.Of(SendOp.Liftable);

        pWriter.Write(LiftableMode.Drop);
        pWriter.WriteString($"4_{fieldLiftableObject.Coord.ToByte().AsHexadecimal()}");
        pWriter.WriteInt(liftableObject.ItemCount);
        pWriter.WriteUnicodeString(liftableObject.Metadata.MaskQuestId);
        pWriter.WriteUnicodeString(liftableObject.Metadata.MaskQuestState);
        pWriter.WriteUnicodeString(liftableObject.Metadata.EffectQuestId);
        pWriter.WriteUnicodeString(liftableObject.Metadata.EffectQuestState);
        pWriter.WriteBool(true); // effect

        return(pWriter);
    }
Example #18
0
    /*  Name:			Lift()
     *  Description:	Attempts to lift an object in front of the player.
     *  Parameters:		RaycastHit2D objectHit	- The object to try and lift.
     */
    private void Lift(RaycastHit2D objectHit)
    {
        // If a liftable object was hit...
        if ((objectHit.transform.tag == "Liftable") ||
            (objectHit.transform.tag == "Resource"))
        {
            float heightOffset = headHeight + GetComponent <BoxCollider2D>().offset.y;

            // Set it as the lifted object.
            heldItem = objectHit.transform.GetComponent <LiftableObject>();

            /* If the object can't be lifted - if it's a mineable rock or otherwise -
             * then reset the heldItem to be null */
            heldItem.OnLift(this, heightOffset);

            // This is where a lifting animation should happen.
        }
    }
Example #19
0
    /*	Name:			Start()
     *  Description:	The initializations needed when this object is created.
     *
     */
    protected override void Start()
    {
        // A reference to the collider of the player object.
        BoxCollider2D collider = GetComponent <BoxCollider2D>();

        base.Start();

        heldItem = null;

        // Gets the midpoint of the player's collision box, to determine
        // where they lift from.
        playerLiftOffset = collider.offset.y;
        // Gets an offset for where the bottom of the box collider is, in
        // relation to the player's transform location.
        playerBottomOffset = collider.offset.y - collider.size.y / 2;


        // The player shouldn't be destroyed between rounds, just disabled.
        //DontDestroyOnLoad (gameObject);
    }
Example #20
0
        // Funcion que levanta el objeto y lo coloca en el transform
        // especificado en los argumentos.
        public virtual LiftableObject LiftTopObject(Transform hands)
        {
            if (TopObject != null)
            {
                TopObject.transform.parent               = hands;
                TopObject.transform.localPosition        = Vector3.zero;
                TopObject.transform.localRotation        = Quaternion.identity;
                TopObject.transform.parent.localPosition = new Vector3(-0.00626f, 0.00559f, 0.00225f);
                TopObject.transform.parent.localRotation = Quaternion.Euler(-90f, 0f, 35f);
                Utilities.ChangeHighlight(TopObject.transform, Color.black);
                LiftableObject lObject = TopObject;
                TopObject = null;

                audioSource.clip = GrabClip;
                audioSource.Play();

                return(lObject);
            }
            return(null);
        }
Example #21
0
    public static PacketWriter LoadLiftables(List <IFieldObject <LiftableObject> > liftableObjects)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.Liftable);

        pWriter.Write(LiftableMode.LoadLiftables);
        pWriter.Write(liftableObjects.Count);
        foreach (IFieldObject <LiftableObject> fieldLiftableObject in liftableObjects)
        {
            LiftableObject liftableObject = fieldLiftableObject.Value;

            pWriter.WriteString(liftableObject.EntityId);
            pWriter.WriteByte(); // not sure ?
            pWriter.WriteInt(liftableObject.ItemCount);
            pWriter.Write(liftableObject.State);
            pWriter.WriteUnicodeString(liftableObject.Metadata.MaskQuestId);
            pWriter.WriteUnicodeString(liftableObject.Metadata.MaskQuestState);
            pWriter.WriteUnicodeString(liftableObject.Metadata.EffectQuestId);
            pWriter.WriteUnicodeString(liftableObject.Metadata.EffectQuestState);
            pWriter.WriteBool(true); // effect
        }

        return(pWriter);
    }
Example #22
0
    public static PacketWriter PlaceLiftable(LiftableObject liftable, int ownerObjectId)
    {
        PacketWriter pWriter = PacketWriter.Of(SendOp.RESPONSE_CUBE);

        pWriter.Write(ResponseCubePacketMode.PlaceFurnishing);
        pWriter.WriteBool(false);
        pWriter.WriteInt(ownerObjectId);
        pWriter.WriteInt(ownerObjectId);
        pWriter.WriteInt();
        pWriter.WriteInt();
        pWriter.Write(liftable.Position.ToByte());
        pWriter.WriteByte();
        pWriter.WriteLong();
        pWriter.WriteInt(liftable.ItemId);
        pWriter.WriteLong();
        pWriter.WriteLong();
        pWriter.WriteByte();
        pWriter.WriteByte(1);
        pWriter.Write(liftable.Rotation.Z);
        pWriter.WriteInt();
        pWriter.WriteByte();

        return(pWriter);
    }
Example #23
0
 protected new virtual void Start()
 {
     Id          = gameObject.GetInstanceID();
     TopObject   = LookForLiftable(gameObject);
     audioSource = GetComponent <AudioSource>();
 }
Example #24
0
    // Update is called once per frame
    void Update()
    {
        if (objectToLift != null)
        {
            objectToLift.transform.position = Vector3.Lerp(objectToLift.transform.position, liftPoint.position, liftSpeed * Time.deltaTime);
        }

        if (cleanBotState == botState.Patrol)
        {
        }
        else if (cleanBotState == botState.Cleaning)
        {
        }
        else if (cleanBotState == botState.Lifting)
        {
        }
        else if (cleanBotState == botState.Holding)
        {
        }
        else if (cleanBotState == botState.Dropping)
        {
        }
        else if (cleanBotState == botState.Returning)
        {
        }

        currentDest = agent.destination;

        gyroscope.transform.position = transform.position;

        RaycastHit rayHit;

        if (Physics.Raycast(transform.position, transform.forward + new Vector3(0, -0.5f, 0), out rayHit, 2f, rayMask))
        {
            if (rayHit.collider.gameObject.tag == "Bar" && !isCleaning)
            {
                bar = rayHit.collider.gameObject.GetComponent <LoadingBar>();
                if (bar.currentFillNum > 0.25f)
                {
                    beeper.clip = barBeep;
                    beeper.Play();
                    initHerbPos = transform.position;
                    isCleaning  = true;
                    agent.speed = 0.1f;
                    isTurning   = true;
                    Invoke("resetSpeed", 0.5f);
                    agent.SetDestination(bar.initialSource.position);
                }
            }
            else
            {
                if (Physics.Raycast(transform.position, transform.forward, out rayHit, 2f, rayMask))
                {
                    if ((rayHit.collider.gameObject.tag == "Wall" || rayHit.collider.gameObject.tag == "Pushable") && !isTurning && (Vector3.Angle(transform.forward, moveTransforms[currentPos].position - transform.position) < 5f))
                    {
                        beeper.clip = wallBeep;
                        beeper.Play();
                        isTurning  = true;
                        currentPos = (currentPos + turnDirectionInt) % 4;
                        if (currentPos == -1)
                        {
                            currentPos = moveTransforms.Length - 1;
                        }
                        agent.SetDestination(moveTransforms[currentPos].position);
                        //initDir = transform.rotation;
                        agent.speed = 0.1f;
                        Invoke("resetSpeed", 1f);
                    }
                    else
                    if (rayHit.collider.gameObject.tag == "EnergySource" /*&& isCleaning*/)
                    {
                        //pick up block here
                        source = rayHit.collider.gameObject.GetComponent <LiftableObject>();
                        if (Vector3.Distance(source.initialPos, source.transform.position) > 3)
                        {
                            isCleaning = true;
                            //interactionController.objectToLift = rayHit.collider.gameObject;
                            //interactionController.LiftObject();
                            objectToLift = rayHit.collider.gameObject;

                            agent.speed = 0.1f;
                            isTurning   = true;
                            Invoke("resetSpeed", 0.5f);
                            agent.SetDestination(source.initialPos);
                            holdingSource = true;
                            if (initHerbPos == new Vector3(0, 25, 0))
                            {
                                initHerbPos = transform.position;
                            }
                        }
                    }
                }
            }
        }
        Debug.DrawRay(transform.position, (transform.forward + new Vector3(0, -0.5f, 0)).normalized * 2f, Color.cyan);


        if (!isCleaning)
        {
            //agent.SetDestination(movePoint);
            if (Mathf.Abs(agent.destination.x - initHerbPos.x) < 0.01f && Mathf.Abs(agent.destination.z - initHerbPos.z) < 0.01f)   //y value will differ
            {
                if (Vector3.Distance(transform.position, initHerbPos) < 1)
                {
                    agent.SetDestination(moveTransforms[currentPos].position);
                    initHerbPos = new Vector3(0, 25, 0);                           //this is a dummy number as null is not assignable to a V3
                }
            }
            else
            {
                agent.SetDestination(moveTransforms[currentPos].position);
            }
        }
        else
        {
            if (!holdingSource && bar.currentFillNum < 0.25f)
            {
                isCleaning  = false;
                bar         = null;
                source      = null;
                agent.speed = 0.1f;
                isTurning   = true;
                agent.SetDestination(initHerbPos);
                Invoke("resetSpeed", 0.5f);
                //agent.SetDestination(movePoint);
            }
            else if (holdingSource == true && Vector3.Distance(transform.position, source.initialPos) < 2f && !isTurning)
            {
                //put source down
                interactionController.objectToLift = source.gameObject;
                agent.SetDestination(initHerbPos);
                interactionController.dropObject();
                interactionController.objectToLift = null;
                holdingSource = false;
                isCleaning    = false;
                bar           = null;
                source        = null;
                agent.speed   = 0.1f;
                isTurning     = true;
                //print(initHerbPos);
                //print (agent.destination);
                Invoke("resetSpeed", 0.5f);
                //agent.SetDestination(movePoint);
            }
        }
    }
Example #25
0
 void Awake()
 {
     _lo = GetComponent<LiftableObject>();
     _audio = GetComponent<AudioSource>();
 }
Example #26
0
    // Update is called once per frame
    void Update()
    {
        //PushableObject pushScript;
        LiftableObject        liftScript  = null;
        EnvironmentalPushable envPushable = null;

        pushBoxController = null;

        if (characterControl != null && characterControl.lockMovement == true)
        {
            dropObject();
        }


        //Raycasting (4 directions) ----------------------------
        RaycastHit rayHit;

        if (Physics.Raycast(transform.position + new Vector3(0, 1, 0), transform.forward + new Vector3(0, -0.5f, 0), out rayHit, 1.2f, rayMask))
        {
            pushBoxController = rayHit.collider.gameObject.GetComponent <PushableObject>();
            liftScript        = rayHit.collider.gameObject.GetComponent <LiftableObject>();
            envPushable       = rayHit.collider.gameObject.GetComponent <EnvironmentalPushable>();
        }

        if ((pushBoxController == null && liftScript == null && envPushable == null) &&
            Physics.Raycast(transform.position + new Vector3(0, 1, 0) + 0.25f * transform.right, transform.forward + new Vector3(0, -0.5f, 0) + 1.5f * transform.right, out rayHit, 1.2f, rayMask))
        {
            pushBoxController = rayHit.collider.gameObject.GetComponent <PushableObject>();
            liftScript        = rayHit.collider.gameObject.GetComponent <LiftableObject>();
            envPushable       = rayHit.collider.gameObject.GetComponent <EnvironmentalPushable>();
        }

        if ((pushBoxController == null && liftScript == null && envPushable == null) &&
            Physics.Raycast(transform.position + new Vector3(0, 1, 0) - 0.25f * transform.right, transform.forward + new Vector3(0, -0.5f, 0) - 1.5f * transform.right, out rayHit, 1.2f, rayMask))
        {
            pushBoxController = rayHit.collider.gameObject.GetComponent <PushableObject>();
            liftScript        = rayHit.collider.gameObject.GetComponent <LiftableObject>();
            envPushable       = rayHit.collider.gameObject.GetComponent <EnvironmentalPushable>();
        }

        if (optionalCam != null)
        {
            if ((pushBoxController == null && liftScript == null && envPushable == null) &&
                Physics.Raycast(optionalCam.transform.position, optionalCam.transform.forward, out rayHit, (Vector3.Distance(transform.position, optionalCam.transform.position) + 1.3f), rayMask))
            {
                pushBoxController = rayHit.collider.gameObject.GetComponent <PushableObject>();
                liftScript        = rayHit.collider.gameObject.GetComponent <LiftableObject>();
                envPushable       = rayHit.collider.gameObject.GetComponent <EnvironmentalPushable>();
            }
        }

        Debug.DrawRay(transform.position + new Vector3(0, 1, 0) + 0.25f * transform.right, (transform.forward + new Vector3(0, -0.5f, 0) + 1.5f * transform.right).normalized * 1.2f, Color.magenta);
        Debug.DrawRay(transform.position + new Vector3(0, 1, 0) - 0.25f * transform.right, (transform.forward + new Vector3(0, -0.5f, 0) - 1.5f * transform.right).normalized * 1.2f, Color.magenta);
        if (optionalCam != null)
        {
            Debug.DrawRay(optionalCam.transform.position, (optionalCam.transform.forward).normalized * (Vector3.Distance(transform.position, optionalCam.transform.position) + 1.2f), Color.green);
        }
        Debug.DrawRay(transform.position + new Vector3(0, 1, 0), (transform.forward + new Vector3(0, -0.5f, 0)).normalized * 1.2f, Color.magenta);


        //-------------------------------------------------------


        //Raycast resolution ----------------------
        if (liftScript != null && characterControl.lockMovement != true)
        {
            objectToLift = liftScript.gameObject;
            nextToPickup = true;
        }
        else
        {
            if (!holdingPickup)
            {
                objectToLift = null;
            }
            nextToPickup = false;

            if (pushBoxController != null)
            {
                objectToPush   = pushBoxController.gameObject;
                nextToPushable = true;
            }
            else
            {
                if (!pushingObject)
                {
                    objectToPush = null;
                }
                nextToPushable = false;

                if (envPushable != null)
                {
                    nextToEnvPushable = true;
                }
                else
                {
                    nextToEnvPushable = false;
                }
            }
        }
        //-----------------------------------------



        if (objectToLift != null)
        {
            if (nextToPickup && !holdingPickup && !pushingObject && !objectToLift.GetComponent <LiftableObject>().beingCarried)
            {
                prompt.SetActive(true);
                if (Input.GetKeyDown(KeyCode.E) || Input.GetButtonDown("Interact"))
                {
                    //lerpingPickup = true;
                    objectToLift.GetComponent <LiftableObject>().beingCarried = true;
                    LiftObject();
                }
            }
        }

        if (nextToPushable && !holdingPickup && !pushingObject)
        {
            prompt.SetActive(true);
            if (Input.GetKeyDown(KeyCode.E) || Input.GetButtonDown("Interact"))
            {
                transitioning = true;
                pushingObject = true;
                characterControl.lockMovement = true;
                characterControl.pushing      = true;
                //character.pushingObject = true;
                objectToPush.GetComponent <Rigidbody>().mass = 200f;
                //gameObject.GetComponent<MoveBehaviour>().pushing = true;

                //objectToPush.GetComponent<Rigidbody>().isKinematic = true;
                //Physics.IgnoreCollision(objectToPush.GetComponent<Collider>(), gameObject.transform.parent.GetComponent<Collider>());
                //pushPos.position = objectToPush.transform.position;
                pushBoxController.beingPushed = true;
                float tempDist     = Vector3.Distance(transform.position, pushBoxController.pushPoints[0].position);
                int   nearestPoint = 0;
                for (int i = 0; i < pushBoxController.pushPoints.Length; i++)
                {
                    if (Vector3.Distance(transform.position, pushBoxController.pushPoints[i].position) < tempDist)
                    {
                        tempDist     = Vector3.Distance(transform.position, pushBoxController.pushPoints[i].position);
                        nearestPoint = i;
                    }
                }
                pushPoint = pushBoxController.pushPoints[nearestPoint];
            }
        }


        if (nextToEnvPushable && !holdingPickup && !pushingObject)
        {
            if (envPushable.animPlayed == false)
            {
                prompt.SetActive(true);
                if (Input.GetKeyDown(KeyCode.E) || Input.GetButtonDown("Interact"))
                {
                    envPushable.PlayAnim();
                    prompt.SetActive(false);
                }
            }
        }

        if ((!nextToPickup && !nextToPushable && !nextToEnvPushable) || holdingPickup || pushingObject)
        {
            prompt.SetActive(false);
        }

        if (holdingPickup && !transitioning)
        {
            if (Input.GetKeyDown(KeyCode.E) || Input.GetButtonDown("Interact"))
            {
                //lerpingPickup = false;
                dropObject();
            }
        }

        if (pushingObject && !transitioning)
        {
            //print(pushPos.position);

            if (Input.GetKeyDown(KeyCode.E) || Input.GetButtonDown("Interact"))
            {
                pushingObject                 = false;
                characterControl.pushing      = false;
                characterControl.lockMovement = false;

                objectToPush.GetComponent <Rigidbody>().mass = 100000;
                //gameObject.GetComponent<MoveBehaviour>().pushing = false;

                //Physics.IgnoreCollision(objectToPush.GetComponent<Collider>(), gameObject.transform.parent.GetComponent<Collider>(), false);
            }
            else
            {
                if (Vector3.Distance(transform.position, new Vector3(pushPoint.position.x, transform.position.y, pushPoint.position.z)) > 0.03f && characterControl.lockMovement)
                {
                    transform.position = Vector3.Lerp(transform.position, new Vector3(pushPoint.position.x, transform.position.y, pushPoint.position.z), 0.5f);
                    Physics.IgnoreCollision(objectToPush.GetComponent <Collider>(), gameObject.transform.GetComponent <Collider>());
                    //play moving anim here
                }
                else
                {
                    Physics.IgnoreCollision(objectToPush.GetComponent <Collider>(), gameObject.transform.GetComponent <Collider>(), false);
                    if (characterControl.lockMovement)
                    {
                        characterControl.lockMovement = false;
                        transform.LookAt(new Vector3(objectToPush.transform.position.x, transform.position.y, objectToPush.transform.position.z));
                    }
                    else
                    {
                        transform.LookAt(new Vector3(objectToPush.transform.position.x, transform.position.y, objectToPush.transform.position.z));
                        if (Vector3.Distance(pushPos.position, new Vector3(pushPoint.position.x, pushPos.position.y, pushPoint.position.z)) > 1.5f)
                        {
                            pushingObject                 = false;
                            characterControl.pushing      = false;
                            characterControl.lockMovement = false;

                            objectToPush.GetComponent <Rigidbody>().mass = 100000;
                        }
                    }
                }
            }
        }

        if (holdingPickup && lerpingPickup)
        {
            objectToLift.transform.LookAt(liftPos.position + transform.forward);
            objectToLift.transform.position = Vector3.Lerp(objectToLift.transform.position, liftPos.position, liftSpeed);
        }

        /*if (pushingObject)
         * {
         *  //objectToPush.transform.position = Vector3.Lerp(objectToPush.transform.position, pushPos.position, 5);
         * }*/

        transitioning = false;
    }
Example #27
0
    // Update is called once per frame
    void Update()
    {
        currentDest = agent.destination;

        gyroscope.transform.position = transform.position;


        if (cleanBotState == botState.Patrol)
        {
            agent.SetDestination(moveTransforms[currentPos].position);

            RaycastHit rayHit;

            //Right Ray Check
            if (Physics.Raycast(transform.position, transform.forward + new Vector3(0, -0.5f, 0) + (0.75f * transform.right), out rayHit, 2f, rayMask) &&
                (cleanBotState != botState.Lifting) && (cleanBotState != botState.Cleaning))
            {
                if (rayHit.collider.gameObject.tag == "Bar")
                {
                    bar = rayHit.collider.gameObject.GetComponent <LoadingBar>();
                    if (bar.currentFillNum > 0.25f)
                    {
                        beeper.clip = barBeep;
                        beeper.Play();
                        initHerbPos = transform.position;
                        //isCleaning = true;
                        cleanBotState = botState.Cleaning;
                        agent.speed   = 0.1f;
                        isTurning     = true;
                        Invoke("resetSpeed", 0.5f);
                        agent.SetDestination(bar.initialSource.position);
                    }
                }
                else
                {
                    if (Physics.Raycast(transform.position, transform.forward + 0.75f * transform.right, out rayHit, 2f, rayMask))
                    {
                        if (rayHit.collider.gameObject.tag == "EnergySource")
                        {
                            //pick up block here
                            source = rayHit.collider.gameObject.GetComponent <LiftableObject>();
                            if (Vector3.Distance(source.initialPos, source.transform.position) > 3 && !source.beingCarried)
                            {
                                beeper.clip = barBeep;
                                beeper.Play();
                                cleanBotState = botState.Lifting;
                                objectToLift  = rayHit.collider.gameObject;
                                agent.speed   = 0.1f;
                                isTurning     = true;
                                Invoke("resetSpeed", 0.5f);
                                if (initHerbPos == new Vector3(0, 25, 0))
                                {
                                    initHerbPos = transform.position;
                                }
                            }
                        }
                    }
                }
            }

            //Left Ray Check
            if (Physics.Raycast(transform.position, transform.forward + new Vector3(0, -0.5f, 0) - 0.75f * transform.right, out rayHit, 2f, rayMask) &&
                (cleanBotState != botState.Lifting) && (cleanBotState != botState.Cleaning))
            {
                if (rayHit.collider.gameObject.tag == "Bar")
                {
                    bar = rayHit.collider.gameObject.GetComponent <LoadingBar>();
                    if (bar.currentFillNum > 0.25f)
                    {
                        beeper.clip = barBeep;
                        beeper.Play();
                        initHerbPos = transform.position;
                        //isCleaning = true;
                        cleanBotState = botState.Cleaning;
                        agent.speed   = 0.1f;
                        isTurning     = true;
                        Invoke("resetSpeed", 0.5f);
                        agent.SetDestination(bar.initialSource.position);
                    }
                }
                else
                {
                    if (Physics.Raycast(transform.position, transform.forward - 0.75f * transform.right, out rayHit, 2f, rayMask))
                    {
                        if (rayHit.collider.gameObject.tag == "EnergySource")
                        {
                            //pick up block here
                            source = rayHit.collider.gameObject.GetComponent <LiftableObject>();
                            if (Vector3.Distance(source.initialPos, source.transform.position) > 3 && !source.beingCarried)
                            {
                                beeper.clip = barBeep;
                                beeper.Play();
                                cleanBotState = botState.Lifting;
                                objectToLift  = rayHit.collider.gameObject;
                                agent.speed   = 0.1f;
                                isTurning     = true;
                                Invoke("resetSpeed", 0.5f);
                                if (initHerbPos == new Vector3(0, 25, 0))
                                {
                                    initHerbPos = transform.position;
                                }
                            }
                        }
                    }
                }
            }

            //ForwardRayCheck
            if (Physics.Raycast(transform.position, transform.forward + new Vector3(0, -0.5f, 0), out rayHit, 2f, rayMask))
            {
                if (rayHit.collider.gameObject.tag == "Bar")
                {
                    bar = rayHit.collider.gameObject.GetComponent <LoadingBar>();
                    if (bar.currentFillNum > 0.25f)
                    {
                        beeper.clip = barBeep;
                        beeper.Play();
                        initHerbPos   = transform.position;
                        cleanBotState = botState.Cleaning;
                        agent.speed   = 0.1f;
                        isTurning     = true;
                        Invoke("resetSpeed", 0.5f);
                        agent.SetDestination(bar.initialSource.position);
                    }
                }
                else
                {
                    if (Physics.Raycast(transform.position, transform.forward, out rayHit, 2f, rayMask))
                    {
                        if ((rayHit.collider.gameObject.tag == "Wall" || rayHit.collider.gameObject.tag == "Pushable") && !isTurning && (Vector3.Angle(transform.forward, moveTransforms[currentPos].position - transform.position) < 5f))
                        {
                            beeper.clip = wallBeep;
                            beeper.Play();
                            isTurning  = true;
                            currentPos = (currentPos + turnDirectionInt) % 4;
                            if (currentPos == -1)
                            {
                                currentPos = moveTransforms.Length - 1;
                            }
                            agent.SetDestination(moveTransforms[currentPos].position);
                            //initDir = transform.rotation;
                            agent.speed = 0.1f;
                            Invoke("resetSpeed", 1f);
                        }
                        else
                        if (rayHit.collider.gameObject.tag == "EnergySource")
                        {
                            //pick up block here
                            source = rayHit.collider.gameObject.GetComponent <LiftableObject>();
                            if (Vector3.Distance(source.initialPos, source.transform.position) > 3 && !source.beingCarried)
                            {
                                beeper.clip = barBeep;
                                beeper.Play();
                                cleanBotState = botState.Lifting;
                                objectToLift  = rayHit.collider.gameObject;

                                agent.speed = 0.1f;
                                isTurning   = true;
                                Invoke("resetSpeed", 0.5f);
                                if (initHerbPos == new Vector3(0, 25, 0))
                                {
                                    initHerbPos = transform.position;
                                }
                            }
                        }
                    }
                }
            }

            //Debug.DrawRay(transform.position, (transform.forward + new Vector3(0, -0.5f, 0)).normalized * 2f, Color.cyan);
            //Debug.DrawRay(transform.position, (transform.forward + 0.75f*transform.right).normalized * 2f, Color.magenta);
            //Debug.DrawRay(transform.position, (transform.forward - 0.75f * transform.right).normalized * 2f, Color.magenta);
        }
        else if (cleanBotState == botState.Cleaning)
        {
            if (bar.currentFillNum < 0.25f)
            {
                cleanBotState = botState.Returning;
                bar           = null;
                source        = null;
                agent.speed   = 0.1f;
                isTurning     = true;
                Invoke("resetSpeed", 0.5f);
                //agent.SetDestination(movePoint);
            }
            else
            {
                RaycastHit rayHit;
                if (Physics.Raycast(transform.position, transform.forward, out rayHit, 2f, rayMask))
                {
                    if (rayHit.collider.gameObject.tag == "EnergySource")
                    {
                        //pick up block here
                        source = rayHit.collider.gameObject.GetComponent <LiftableObject>();
                        if (Vector3.Distance(source.initialPos, source.transform.position) > 3)
                        {
                            beeper.clip = barBeep;
                            beeper.Play();
                            cleanBotState = botState.Lifting;
                            objectToLift  = rayHit.collider.gameObject;

                            agent.speed = 0.1f;
                            isTurning   = true;
                            Invoke("resetSpeed", 0.5f);
                            if (initHerbPos == new Vector3(0, 25, 0))
                            {
                                initHerbPos = transform.position;
                            }
                        }
                    }
                }
            }
        }
        else if (cleanBotState == botState.Lifting)
        {
            agent.SetDestination(transform.position);
            objectToLift = source.gameObject;
            objectToLift.GetComponent <Rigidbody>().isKinematic = true;
            source.beingCarried = true;
            if (Vector3.Distance(objectToLift.transform.position, liftPoint.position) > 0.4f)
            {
                objectToLift.transform.position = Vector3.Lerp(objectToLift.transform.position, liftPoint.position, liftSpeed * Time.deltaTime);
            }
            else
            {
                cleanBotState = botState.Holding;
            }
        }
        else if (cleanBotState == botState.Holding)
        {
            objectToLift = source.gameObject;
            objectToLift.transform.position = Vector3.Lerp(objectToLift.transform.position, liftPoint.position, liftSpeed * 10 * Time.deltaTime);
            agent.SetDestination(source.initialPos);

            if (Vector3.Distance(transform.position, source.initialPos) < 1.25f && !isTurning)
            {
                //put source down
                cleanBotState = botState.Dropping;
                //agent.SetDestination(initHerbPos);
                //interactionController.dropObject();
                //interactionController.objectToLift = null;
                //holdingSource = false;
                //isCleaning = false;
                //bar = null;
                //source = null;
                //agent.speed = 0.1f;
                //isTurning = true;
                //print(initHerbPos);
                //print (agent.destination);
                //Invoke("resetSpeed", 0.5f);
                //agent.SetDestination(movePoint);
            }
        }
        else if (cleanBotState == botState.Dropping)
        {
            agent.SetDestination(transform.position);
            if (objectToLift != null)
            {
                if (Vector3.Distance(objectToLift.transform.position, dropPoint.position) > 0.4f)
                {
                    objectToLift.transform.position = Vector3.Lerp(objectToLift.transform.position, dropPoint.position, liftSpeed * Time.deltaTime);
                }
                else
                {
                    objectToLift.GetComponent <Rigidbody>().isKinematic = false;
                    source.beingCarried = false;

                    objectToLift = null;
                    bar          = null;
                    source       = null;
                    agent.speed  = 0.1f;
                    isTurning    = true;
                    Invoke("resetSpeed", 0.5f);

                    cleanBotState = botState.Returning;
                }
            }
        }
        else if (cleanBotState == botState.Returning)
        {
            if (Mathf.Abs(agent.destination.x - initHerbPos.x) < 0.01f && Mathf.Abs(agent.destination.z - initHerbPos.z) < 0.01f)   //y value will differ
            {
                if (Vector3.Distance(transform.position, initHerbPos) < 1)
                {
                    agent.SetDestination(moveTransforms[currentPos].position);
                    initHerbPos   = new Vector3(0, 25, 0);                         //this is a dummy number as null is not assignable to a V3
                    cleanBotState = botState.Patrol;
                }
            }
            else
            {
                //agent.SetDestination(moveTransforms[currentPos].position);
                agent.SetDestination(initHerbPos);
            }
        }
    }
Example #28
0
 public void ObjectSetInPlace()
 {
     liftedObject = null;
     _isLifting = false;
 }
Example #29
0
 public abstract bool PutDownObject(LiftableObject liftable);
Example #30
0
    // Update is called once per frame
    void Update()
    {
        RaycastHit rayHit;

        if (Physics.Raycast(transform.position, transform.forward + new Vector3(0, -0.5f, 0), out rayHit, 2f, rayMask))
        {
            if (rayHit.collider.gameObject.tag == "Bar" && !isCleaning)
            {
                bar = rayHit.collider.gameObject.GetComponent <LoadingBar>();
                if (bar.currentFillNum > 0.25f)
                {
                    isCleaning  = true;
                    agent.speed = 0.1f;
                    isTurning   = true;
                    Invoke("resetSpeed", 0.75f);
                    agent.SetDestination(bar.initialSource.position);
                }
            }
            else
            {
                if (rayHit.collider.gameObject.tag == "EnergySource" && isCleaning)
                {
                    //pick up block here
                    interactionController.objectToLift = rayHit.collider.gameObject;
                    interactionController.LiftObject();
                    source      = rayHit.collider.gameObject.GetComponent <LiftableObject>();
                    agent.speed = 0.1f;
                    isTurning   = true;
                    Invoke("resetSpeed", 0.5f);
                    agent.SetDestination(source.initialPos);
                    holdingSource = true;
                }
            }
        }
        Debug.DrawRay(transform.position, (transform.forward + new Vector3(0, -0.5f, 0)).normalized * 2f, Color.cyan);


        if (!isCleaning)
        {
            if (Vector3.Distance(transform.position, movePoints[currentPos]) < 0.1f && !isTurning)
            {
                currentPos  = (currentPos + 1) % movePoints.Length;
                agent.speed = 0.1f;
                isTurning   = true;
                Invoke("resetSpeed", 0.5f);
            }
            agent.SetDestination(movePoints[currentPos]);
        }
        else
        {
            if (bar.currentFillNum < 0.25f && !holdingSource)
            {
                isCleaning  = false;
                bar         = null;
                source      = null;
                agent.speed = 0.1f;
                isTurning   = true;
                Invoke("resetSpeed", 0.5f);
                agent.SetDestination(movePoints[currentPos]);
            }
            else if (holdingSource == true && Vector3.Distance(transform.position, source.initialPos) < 2f && !isTurning)
            {
                //put source down
                interactionController.objectToLift = source.gameObject;
                interactionController.dropObject();
                interactionController.objectToLift = null;
                holdingSource = false;
                isCleaning    = false;
                bar           = null;
                source        = null;
                agent.speed   = 0.1f;
                isTurning     = true;
                Invoke("resetSpeed", 0.5f);
                agent.SetDestination(movePoints[currentPos]);
            }
        }
    }