Example #1
0
 def getCoords(self):
     x, y = self.state.position
     x0 = x - self.DRAW_SIZE
     y0 = y - self.DRAW_SIZE
     x1 = x + self.DRAW_SIZE
     y1 = y + self.DRAW_SIZE
     return util.toScreen([x0, y0, x1, y1], CELL_RESOLUTION)
Example #2
0
    def up(self, pos):
        if not self.enabled:
            return

        for e in self.elements.itervalues():
            e.state = "inactive"

            if (pos[0] > e.x and pos[0] < e.x + e.w and pos[1] > e.y and pos[1] < e.y + e.h) and e.event:
                event.pub(e.event, None)

        centered = False
        for b in self.uni.bodies.itervalues():
            sp = util.toScreen(b.position, self.camera)

            if (sp[0] - pos[0])**2 + (sp[1] - pos[1])**2 < (b.r*self.camera.zoom)**2:
                self.camera.center(b)
                centered = True

        if not centered:
            self.camera.release()
Example #3
0
 def setupGraphics(self, canvas):
     core_corners = util.toScreen(util.circleCorners(self.position, self.radius), CELL_RESOLUTION)
     outer_corners = util.toScreen(util.circleCorners(self.position, self.maxDistance()), CELL_RESOLUTION)
     canvas.create_oval(*outer_corners, fill="red")        
     canvas.create_oval(*core_corners, fill="black")
Example #4
0
    def render(self, uni, ui, draw_orbits = False):
        draw_orbits = draw_orbits or self.draw_orbits

        if self.camera.centered:
            self.camera.position.x = self.camera.centered.position.x
            self.camera.position.y = self.camera.centered.position.y

        self.screen.fill(self.colors["black"])

        for body in uni.bodies.itervalues():
            pygame.draw.circle(self.screen, self.colors[body.color], util.toScreen(body.position, self.camera), int(body.r*self.scale*self.camera.zoom))

        if ui.enabled:
            if draw_orbits:
                for body in uni.bodies.itervalues():
                    if not len(body.previous_positions):
                        break

                    positions = []

                    for pos in body.previous_positions:
                        sp = util.toScreenXy([pos[0], pos[1]], self.camera)
                        positions.append(sp)

                    while len(positions) < 2:
                        positions.append(util.toScreenXy([body.previous_positions[-1][0], body.previous_positions[-1][1]], self.camera))

                    pygame.draw.lines(self.screen, self.colors["white"], False, positions)

            for e in ui.elements.itervalues():
                if not e.display:
                    continue

                if isinstance(e, uim.Button):
                    self.screen.blit(e.images[e.state], (e.x, e.y))
                elif isinstance(e, uim.Text):
                    self.screen.blit(e.text, (e.x, e.y))


            if ui.namesEnabled:
                for body in uni.bodies.itervalues():
                    name    = self.fonts["names"].render(body.name, 1, (240, 240, 240))
                    pos     = util.toScreen(body.position, self.camera)
                    size    = self.fonts["names"].size(body.name)
                    pos[0]  -= size[0]/2
                    pos[1]  -= size[1] + body.r*self.camera.zoom*2

                    self.screen.blit(name, pos)

            if ui.vectorsEnabled:
                for body in uni.bodies.itervalues():
                    pos         = util.toScreen(body.position, self.camera)
                    vel         = body.velocity.tl()
                    r           = 0.003
                    end         = [int(pos[0] + vel[0]*r), int(pos[1] + vel[1]*r)]
                    text        = "v = " + str(int(body.velocity.l())) + "m/s"
                    v           = self.fonts["names"].render((text), 1, (240, 240, 240))
                    pos_text    = [end[0] - 10, end[1] - 50]

                    pygame.draw.line(self.screen, self.colors["white"], pos, end)
                    pygame.draw.circle(self.screen, self.colors["white"], end, 1)
                    self.screen.blit(v, pos_text)


        pygame.display.flip()