function [new_agent, keepTurning] = MazeControl( t, dt, agent, rectangles, numberOfRectangles, target, keepTurning)
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
    uMax = 1;

    x = agent(t-1, 1);
    y = agent(t-1, 2);
    v = agent(t-1, 3);
    theta1 = agent(t-1, 4);   
    u = agent(t-1, 5);  
    
    theta2 = theta1 + u*v*dt;
    agent(t, 1) = x + v*dt*cos(theta1);
    agent(t, 2) = y + v*dt*sin(theta1);
	agent(t, 3) = v;
	agent(t, 4) = theta2;
    
    targetx = target(1);
    targety = target(2);
    thetaToTarget = atan((targety-y)/(targetx-x)) - theta1;
    if (targetx - x) < 0
        thetaToTarget = thetaToTarget + pi;
    end
    thetaToTarget = mod(thetaToTarget, 2*pi);
    
    distanceStraight = IRSensorAll(rectangles, numberOfRectangles,...
        agent(t-1,1), agent(t-1,2), agent(t-1,4));
    distanceRight = IRSensorRightAll(rectangles, numberOfRectangles,...
        agent(t-1,1), agent(t-1,2), agent(t-1,4));
    distanceLeft = IRSensorLeftAll(rectangles, numberOfRectangles,...
        agent(t-1,1), agent(t-1,2), agent(t-1,4));
    
    ignoreDistance = 2;
    if (keepTurning == 1 && (distanceRight > 0 && distanceRight <= ignoreDistance))
        keepTurning = 0
    end
    
    if (keepTurning == -1 && (distanceLeft > 0 && distanceLeft <= ignoreDistance))
        keepTurning = 0
    end
        
    if keepTurning ~= 0
        agent(t, 5) = agent(t-1, 5);
        x
        
    elseif thetaToTarget < pi/4
        if (distanceStraight < 0 || distanceStraight>ignoreDistance)
            agent(t, 5) = 0;
        else
            if (distanceLeft < 0 || distanceLeft>4*ignoreDistance)
                agent(t, 5) = uMax;
                keepTurning = 1
            else
                agent(t, 5) = -uMax;
                keepTurning = -1
            end
        end
        
    elseif thetaToTarget > 7*pi/4
        if (distanceStraight < 0 || distanceStraight>ignoreDistance)
            agent(t, 5) = 0;
        else
            if (distanceRight < 0 || distanceRight>4*ignoreDistance)
                agent(t, 5) = -uMax;
                keepTurning = -1;
            else
                agent(t, 5) = uMax;
                keepTurning = 1;
            end
        end
        
    elseif thetaToTarget < pi
        if (distanceLeft < 0 || distanceLeft>ignoreDistance)
            agent(t, 5) = uMax;
        else
            if (distanceStraight < 0 || distanceStraight>ignoreDistance)
                agent(t, 5) = 0;
            else
                agent(t, 5) = -uMax;
            end
        end
        
    else
        if (distanceRight < 0 || distanceRight>ignoreDistance)
            agent(t, 5) = -uMax;
        else
            if (distanceStraight < 0 || distanceStraight>ignoreDistance)
                agent(t, 5) = 0;
            else
                agent(t, 5) = uMax;
            end
        end
    end

    new_agent = agent;
end

