class Main(object): def __init__(self, size): os.environ["SDL_VIDEO_CENTERED"] = "1" pygame.init() self.size = size self.screen = pygame.display.set_mode(self.size) self.surf = pygame.Surface(self.size) self.clock = pygame.time.Clock() self.running = True self.stage = 1 self.ray1 = Raycasting((200, 320), (500, 50)) self.ray2 = Raycasting((200, 320), (200, 50)) self.ray3 = Raycasting((200, 320), (300, 50)) self.make_wall(10) def main_loop(self, fps=0): while self.running: pygame.display.set_caption("Raytest. FPS: %i" % self.clock.get_fps()) self.events() self.update() self.draw() pygame.display.flip() self.clock.tick(fps) def events(self): for event in pygame.event.get(): if event.type == QUIT: self.running = False elif event.type == KEYDOWN: self.key_down(event.key) elif event.type == MOUSEBUTTONDOWN: self.mouse_down(event.button, event.pos) def key_down(self, key): if key == K_1: self.stage = 1 elif key == K_2: self.stage = 2 elif key == K_3: self.stage = 3 def mouse_down(self, button, pos): if self.stage == 1: if button == 1: self.ray2.pos = vec2d(pos) elif button == 3: self.ray2.target = vec2d(pos) elif self.stage == 2: if button == 1: self.ray3.pos = vec2d(pos) elif button == 3: self.ray3.target = vec2d(pos) elif self.stage == 3: if button == 1: self.ray1.pos = vec2d(pos) elif button == 3: self.ray1.target = vec2d(pos) def update(self): self.points = self.ray1.cast(self.wallgroup, 5, True) self.points2 = self.ray3.cast(self.wallgroup) self.collide = self.ray2.collisionany(self.wallgroup) print self.collide self.rectangles = [] if self.points != []: for point in self.points: rectangle = pygame.Rect(5, 5, 5, 5) rectangle.center = point self.rectangles.append(rectangle) self.rectangles2 = [] if self.points2 != []: for point in self.points2: rectangle = pygame.Rect(5, 5, 5, 5) rectangle.center = point self.rectangles2.append(rectangle) self.myLine = self.ray1.draw_ray() self.myLine2 = self.ray2.draw_ray() self.myLine3 = self.ray3.draw_ray() def draw(self): self.wallgroup.draw(self.surf) pygame.draw.line(self.surf, (255, 0, 255), self.myLine[0], self.myLine[1]) pygame.draw.line(self.surf, (255, 0, 255), self.myLine2[0], self.myLine2[1]) pygame.draw.line(self.surf, (255, 0, 255), self.myLine3[0], self.myLine3[1]) if self.rectangles != []: for recta in self.rectangles: pygame.draw.rect(self.surf, (255, 255, 0), recta) if self.rectangles2 != []: for recta in self.rectangles2: pygame.draw.rect(self.surf, (255, 255, 0), recta) self.screen.blit(self.surf, (0,0)) self.surf.fill((255, 255, 255)) def make_wall(self, size): self.wallgroup = pygame.sprite.LayeredDirty() x = y = 200 num = 1 for wall in xrange(size): wall = Tile((x,y), num) self.wallgroup.add(wall) x += 32 num += 1