def __init__(self):
     PyGameBase.__init__(self, 400, 600, 40)
     self.rectR = 0
     self.rectG = 0
     self.rectB = 0
     self.x = 100
     self.y = 100
     self.controller = Controller()
     self.width = 10
 def __init__(self):
     PyGameBase.__init__(self,400,600,40)
     self.rectR = 0
     self.rectG = 0
     self.rectB = 0
     self.x = 100
     self.y = 100
     self.controller = Controller()
     self.width = 10
class RectGame(PyGameBase):
    def __init__(self):
        PyGameBase.__init__(self, 400, 600, 40)
        self.rectR = 0
        self.rectG = 0
        self.rectB = 0
        self.x = 100
        self.y = 100
        self.controller = Controller()
        self.width = 10

    def Update(self, deltaT):
        addX = self.controller.getAxis(0)
        addY = self.controller.getAxis(1)
        self.x += addX * 2
        self.y += addY * 2
        if self.controller.getButton(0) == True:
            self.rectG += 5
            if self.rectG >= 255:
                self.rectG -= 255
        if self.controller.getButton(1) == True:
            self.rectR += 5
            if self.rectR >= 255:
                self.rectR -= 255
        if self.controller.getButton(2) == True:
            self.rectB += 5
            if self.rectB >= 255:
                self.rectB -= 255
        dPad = self.controller.getHat(0)
        if dPad == (1, 0):
            self.width = 10
        elif dPad == (0, -1):
            self.width = 0
        elif dPad == (-1, 0):
            self.width = 5
        elif dPad == (0, 1):
            self.width = (20)

    def Render(self, deltaT):
        self.Clear()
        pygame.draw.rect(self.surface, (self.rectR, self.rectG, self.rectB),
                         pygame.Rect(self.x, self.y, 100, 100), self.width)
 def __init__(self, width, height, url, frameRate, arena, handle, track,
              trails):
     self.surface = pygame.display.set_mode((width, height))
     self.width = width
     self.height = height
     self.frameRate = frameRate
     self.arena = arena
     self.track = track
     self.trail = trails
     self.controller = Controller()
     self.speedDemand = 0
     self.steerDemand = 0
     self.r = 250
     self.g = 250
     self.b = 250
     self.myRobot = robotArena.Robot(url, handle)
     self.X = self.myRobot.getState().X
     self.Y = self.myRobot.getState().Y
     self.prevX = self.X
     self.prevY = self.Y
     self.prevsX = [self.X * 10 + 100]
     self.prevsY = [200 - self.Y * 10]
class RectGame(PyGameBase):
    def __init__(self):
        PyGameBase.__init__(self,400,600,40)
        self.rectR = 0
        self.rectG = 0
        self.rectB = 0
        self.x = 100
        self.y = 100
        self.controller = Controller()
        self.width = 10
    def Update(self,deltaT):
        addX = self.controller.getAxis(0)
        addY = self.controller.getAxis(1)
        self.x += addX*2
        self.y += addY*2
        if self.controller.getButton(0) == True:
            self.rectG += 5
            if self.rectG >= 255:
                self.rectG -= 255
        if self.controller.getButton(1) == True:
            self.rectR += 5
            if self.rectR >= 255:
                self.rectR -= 255
        if self.controller.getButton(2) == True:
            self.rectB += 5
            if self.rectB >= 255:
                self.rectB -= 255
        dPad = self.controller.getHat(0)
        if dPad == (1,0):
            self.width = 10
        elif dPad == (0,-1):
            self.width = 0
        elif dPad == (-1,0):
            self.width = 5
        elif dPad == (0,1):
            self.width = (20)
    def Render(self,deltaT):
        self.Clear()
        pygame.draw.rect(self.surface, (self.rectR, self.rectG, self.rectB) , pygame.Rect(self.x,self.y,100,100), self.width)
 def __init__(self,width,height,url,frameRate,arena,handle,track,trails):
     self.surface = pygame.display.set_mode((width,height))
     self.width = width
     self.height = height
     self.frameRate = frameRate
     self.arena = arena
     self.track = track
     self.trail = trails
     self.controller = Controller()
     self.speedDemand = 0
     self.steerDemand = 0
     self.r = 250
     self.g = 250
     self.b = 250
     self.myRobot = robotArena.Robot(url,handle)
     self.X = self.myRobot.getState().X
     self.Y = self.myRobot.getState().Y
     self.prevX = self.X
     self.prevY = self.Y
     self.prevsX = [self.X*10+100]
     self.prevsY = [200-self.Y*10]
class JoystickArena(PyGameBase):
    def __init__(self,width,height,url,frameRate,arena,handle,track,trails):
        self.surface = pygame.display.set_mode((width,height))
        self.width = width
        self.height = height
        self.frameRate = frameRate
        self.arena = arena
        self.track = track
        self.trail = trails
        self.controller = Controller()
        self.speedDemand = 0
        self.steerDemand = 0
        self.r = 250
        self.g = 250
        self.b = 250
        self.myRobot = robotArena.Robot(url,handle)
        self.X = self.myRobot.getState().X
        self.Y = self.myRobot.getState().Y
        self.prevX = self.X
        self.prevY = self.Y
        self.prevsX = [self.X*10+100]
        self.prevsY = [200-self.Y*10]
    def Update(self,deltaT):
        self.speedDemand = self.controller.getAxis(2)*-1*self.arena.maxSpeed
        self.steerDemand = self.controller.getAxis(0)*-1*self.arena.maxSteer
        if self.controller.getButton(0):
            self.g += 5
            if self.g >= 255:
                self.g = 0
        if self.controller.getButton(1):
            self.r += 5
            if self.r >= 255:
                self.r = 0
        if self.controller.getButton(2):
            self.b += 5
            if self.b >= 255:
                self.b = 0
        self.arena.getRobots()
        self.arena.getArenaParameters()
        self.myRobot.colour = (self.r,self.g,self.b)
        self.myRobot.setSpeed(self.speedDemand,self.steerDemand)
        self.prevX = self.X
        self.prevY = self.Y
        self.prevsX.append(self.prevX*10+100)
        self.prevsY.append(200-self.prevY*10)
        self.X = self.myRobot.getState().X
        self.Y = self.myRobot.getState().Y
        if len(self.prevsX) >= 100:
            self.prevsX.pop(0)
            self.prevsY.pop(0)
    def Render(self,deltaT):
        self.Clear()
        if self.track == 1:
            for robot in self.arena.robots:
                try:
                    X = self.arena.getRobotState(robot).X*10+(self.width/2)-self.myRobot.getState().X*10
                    Y = (self.height/2)-(self.arena.getRobotState(robot).Y*10-self.myRobot.getState().Y*10)
                    color = self.arena.getRobotColor(robot)
                    pygame.draw.ellipse(self.surface,color,(X,Y,20,20))
                except WebFault:
                    pass
        else:
            for robot in self.arena.robots:
                try:
                    X = self.arena.getRobotState(robot).X*10+100
                    Y = 200-self.arena.getRobotState(robot).Y*10
                    color = self.arena.getRobotColor(robot)
                    pygame.draw.ellipse(self.surface,color,(X,Y,20,20))
                except WebFault:
                    pass
        if self.trail:
            if self.track:
                for pos in range(len(self.prevsX)):
                    if pos != 0:
                        pygame.draw.line(self.surface,(self.r,self.g,self.b),(self.prevsX[pos]-1+(self.width/2)-self.myRobot.getState().X*10-100,(self.height/2)-self.prevsY[pos-1]*10-self.myRobot.getState().Y*10),(self.prevsX[pos]+(self.width/2)-self.myRobot.getState().X*10-100,(self.height/2)-self.prevsY[pos]*10-self.myRobot.getState().Y*10))
            else:
                for pos in range(len(self.prevsX)):
                    if pos != 0:
                        pygame.draw.line(self.surface,(self.r,self.g,self.b),(self.prevsX[pos-1],self.prevsY[pos-1]),(self.prevsX[pos],self.prevsY[pos]))
class JoystickArena(PyGameBase):
    def __init__(self, width, height, url, frameRate, arena, handle, track,
                 trails):
        self.surface = pygame.display.set_mode((width, height))
        self.width = width
        self.height = height
        self.frameRate = frameRate
        self.arena = arena
        self.track = track
        self.trail = trails
        self.controller = Controller()
        self.speedDemand = 0
        self.steerDemand = 0
        self.r = 250
        self.g = 250
        self.b = 250
        self.myRobot = robotArena.Robot(url, handle)
        self.X = self.myRobot.getState().X
        self.Y = self.myRobot.getState().Y
        self.prevX = self.X
        self.prevY = self.Y
        self.prevsX = [self.X * 10 + 100]
        self.prevsY = [200 - self.Y * 10]

    def Update(self, deltaT):
        self.speedDemand = self.controller.getAxis(
            2) * -1 * self.arena.maxSpeed
        self.steerDemand = self.controller.getAxis(
            0) * -1 * self.arena.maxSteer
        if self.controller.getButton(0):
            self.g += 5
            if self.g >= 255:
                self.g = 0
        if self.controller.getButton(1):
            self.r += 5
            if self.r >= 255:
                self.r = 0
        if self.controller.getButton(2):
            self.b += 5
            if self.b >= 255:
                self.b = 0
        self.arena.getRobots()
        self.arena.getArenaParameters()
        self.myRobot.colour = (self.r, self.g, self.b)
        self.myRobot.setSpeed(self.speedDemand, self.steerDemand)
        self.prevX = self.X
        self.prevY = self.Y
        self.prevsX.append(self.prevX * 10 + 100)
        self.prevsY.append(200 - self.prevY * 10)
        self.X = self.myRobot.getState().X
        self.Y = self.myRobot.getState().Y
        if len(self.prevsX) >= 100:
            self.prevsX.pop(0)
            self.prevsY.pop(0)

    def Render(self, deltaT):
        self.Clear()
        if self.track == 1:
            for robot in self.arena.robots:
                try:
                    X = self.arena.getRobotState(robot).X * 10 + (
                        self.width / 2) - self.myRobot.getState().X * 10
                    Y = (self.height /
                         2) - (self.arena.getRobotState(robot).Y * 10 -
                               self.myRobot.getState().Y * 10)
                    color = self.arena.getRobotColor(robot)
                    pygame.draw.ellipse(self.surface, color, (X, Y, 20, 20))
                except WebFault:
                    pass
        else:
            for robot in self.arena.robots:
                try:
                    X = self.arena.getRobotState(robot).X * 10 + 100
                    Y = 200 - self.arena.getRobotState(robot).Y * 10
                    color = self.arena.getRobotColor(robot)
                    pygame.draw.ellipse(self.surface, color, (X, Y, 20, 20))
                except WebFault:
                    pass
        if self.trail:
            if self.track:
                for pos in range(len(self.prevsX)):
                    if pos != 0:
                        pygame.draw.line(
                            self.surface, (self.r, self.g, self.b),
                            (self.prevsX[pos] - 1 + (self.width / 2) -
                             self.myRobot.getState().X * 10 - 100,
                             (self.height / 2) - self.prevsY[pos - 1] * 10 -
                             self.myRobot.getState().Y * 10),
                            (self.prevsX[pos] + (self.width / 2) -
                             self.myRobot.getState().X * 10 - 100,
                             (self.height / 2) - self.prevsY[pos] * 10 -
                             self.myRobot.getState().Y * 10))
            else:
                for pos in range(len(self.prevsX)):
                    if pos != 0:
                        pygame.draw.line(
                            self.surface, (self.r, self.g, self.b),
                            (self.prevsX[pos - 1], self.prevsY[pos - 1]),
                            (self.prevsX[pos], self.prevsY[pos]))