public IPickerState DoState(PickerLogic picker)
    {
        if (picker.carryingBlock == null)
        {
            if (BlockInstantiator.instance.BlockList.Count > 0)
            {
                GameObject closestBlock = null;
                var        minDistance  = float.MaxValue;
                foreach (var block in BlockInstantiator.instance.BlockList)
                {
                    var tempDistance = Mathf.Abs(picker.transform.position.x - block.transform.position.x);
                    if (tempDistance < minDistance)
                    {
                        minDistance  = tempDistance;
                        closestBlock = block;
                    }
                }

                picker.target = closestBlock.transform;
            }
            else
            {
                picker.target = picker.middlePos;
            }
        }
        else
        {
            var blockColor = picker.carryingBlock.GetComponent <Block>().color;
            picker.target = (blockColor == BlockColour.Blue) ? picker.depositBlue : picker.depositRed;
        }

        return(picker.MovingToState);
    }
    public IPickerState DoState(PickerLogic picker)
    {
        var distanceX = picker.target.position.x - picker.transform.position.x;

        if (Mathf.Abs(distanceX) <= 0.08f)
        {
            picker.movement = Vector2.zero;

            if (picker.target == picker.middlePos)
            {
                return(picker.IdleState);
            }
            else if (picker.blocksInRange.Contains(picker.target.gameObject))
            {
                return(picker.PickUpState);
            }
            else if (picker.target.tag == "Deposit" && picker.carryingBlock != null)
            {
                return(picker.DepositState);
            }
        }
        else if (picker.carryingBlock == null && picker.lastBlockListCount != BlockInstantiator.instance.BlockList.Count)
        {
            picker.lastBlockListCount = BlockInstantiator.instance.BlockList.Count;
            return(picker.SetTargetState);
        }

        picker.movement = new Vector2(distanceX, 0f).normalized;
        return(picker.MovingToState);
    }
    public IPickerState DoState(PickerLogic picker)
    {
        //Debug.Log("Picking up");
        var objectToPickUp = picker.blocksInRange.Find(x => x == picker.target.gameObject);

        picker.blocksInRange.Remove(objectToPickUp);
        objectToPickUp.SetActive(false);
        picker.carryingBlock = objectToPickUp;

        return(picker.SetTargetState);
    }
 public IPickerState DoState(PickerLogic picker)
 {
     if (BlockInstantiator.instance.BlockList.Count == 0)
     {
         return(picker.IdleState);
     }
     else
     {
         return(picker.SetTargetState);
     }
 }
    public IPickerState DoState(PickerLogic picker)
    {
        var targetColour = picker.target.GetComponent <Block>().color;

        if (targetColour == picker.carryingBlock.GetComponent <Block>().color)
        {
            BlockInstantiator.instance.InsertBlockIntoDeposit(picker.carryingBlock);
            picker.carryingBlock = null;
        }

        return(picker.SetTargetState);
    }