public List<Vector3> move(Level level, Transform transform, TimeDirection timeD, out Vector3 rotation)
    {
        List <Vector3> movement = new List<Vector3>(); //might not want to return empty objects this often
        //move these to start
        rotation = Vector3.zero;
        //first check if grabbing something
        //might want to add delay before going further to allow for turning before moving block
        if(level.getEntity(transform.position,transform.TransformDirection(Vector3.forward)).type==states.block)
        {
            grabbing = true;
        }
        //otherwise turn to block
        else
        {
            List<Entity> temp = level.getsurroundingEntity(transform.position);
            {
                foreach(Entity entity in temp)
                {
                    if(entity.type==states.block)
                    {
                        grabbing = true;
                        float angle = Vector3.Angle(transform.TransformDirection(Vector3.forward),entity.obj.transform.position-transform.position);
                        Vector3 cross = Vector3.Cross(transform.TransformDirection(Vector3.forward),entity.obj.transform.position-transform.position);
                        rotation = (cross.y>0)?new Vector3(0,angle,0):new Vector3(0,-angle,0);
                        return movement;
                    }
                }
            }
        }
        //if block is in front
           		if(grabbing)
        {
            if(transform.TransformDirection(Vector3.forward)==Vector3.right||transform.TransformDirection(Vector3.forward)==Vector3.left)
            {
                if (timeD.direction==Vector3.right)
                    movement.Add (Vector3.right);
                else if(timeD.direction==Vector3.left)
                    movement.Add (Vector3.left);
            }
            else if(transform.TransformDirection(Vector3.forward)==Vector3.forward||transform.TransformDirection(Vector3.forward)==Vector3.back)
            {
                if (timeD.direction==Vector3.forward)
                    movement.Add (Vector3.forward);
                else if(timeD.direction==Vector3.back)
                    movement.Add (Vector3.back);
            }
            else{
                return new List<Vector3>();
            }

            //if returning actual values, then fix up the moves to account for both objects
            if (movement.Count>0&&timeD.time>0.1f)
                return move_checks(level, movement,transform);
            }
        return new List<Vector3>();
    }