Ejemplo n.º 1
0
    def draw_force_lines(self):
        """ Draws the a line between particles, thickness depending on the magnitude of the force """

        labels = pyglet.graphics.Batch()
        for fl in self.force_lines:
            f = fl[1]
            e = fl[0]
            if f[0] == 0 and f[1] == 0:
                return  # If the force is 0, don't draw a line

            t_mod = 7500
            F = math.sqrt((f[0] * f[0]) + (f[1] * f[1]))
            line = Shapes.make_line(self.pos, e.pos, thickness=F * t_mod)
            line.draw(pyglet.gl.GL_LINES)

            # Put label in batch
            x = (max(e.pos[0], self.pos[0]) + min(e.pos[0], self.pos[0])) / 2.0
            y = (max(e.pos[1], self.pos[1]) + min(e.pos[1], self.pos[1])) / 2.0
            label_pos = (x, y)
            force_text = str(f[0]) + " / " + str(f[1])
            label = Shapes.make_label(force_text,
                                      label_pos,
                                      size=10,
                                      batch=labels)

        # Draw batch of labels
        labels.draw()
Ejemplo n.º 2
0
    def __init__(self, anchor, size, text):

        super().__init__(anchor)

        self.text = text
        self.size = size
        self.label = Shapes.make_label(self.text, self.anchor, self.size, anchor_x='left', anchor_y='top')
Ejemplo n.º 3
0
    def draw_debug_view(self):
        # Draw circle indicating range
        indices, verts, colors = Shapes.make_circle(center=self.pos,
                                                    radius=self.radius / 2.0)
        # Overwrite degenerate first point
        verts[1][0:1] = verts[1][-2:-1]
        n_points = len(verts[1]) // 2
        pyglet.gl.glLineWidth(1)
        pyglet.graphics.draw(n_points, pyglet.gl.GL_LINE_LOOP, verts, colors)

        # Draw label showing # neighbours
        label_pos = (self.pos[0], self.pos[1] + 3 * self.size + 0.015)
        n_label = Shapes.make_label(str(self._neighbourhood_size),
                                    label_pos,
                                    size=14)
        n_label.draw()
Ejemplo n.º 4
0
    def __init__(self, anchor, w, h, color=(100, 100, 100)):

        super().__init__(anchor)

        self.w = w
        self.h = h
        self.color = color
        self.shape = Shapes.make_rect(self.anchor, self.w, self.h, color=self.color, as_vertexlist = True)
Ejemplo n.º 5
0
    def draw(self):

        # Draw selection circle around selected entity
        if self._cur_selected is not None:
            r = (self._cur_selected.size * 1.2) + 0.005
            indices, verts, colors = Shapes.make_circle(
                center=self._cur_selected.pos, radius=r)
            # Overwrite degenerate first point
            verts = verts[1]
            verts[0:1] = verts[-2:-1]
            self._selection_ring.vertices = verts
            self._selection_ring.colors = colors[1]
            pyglet.gl.glLineWidth(1)
            self._selection_ring.draw(pyglet.gl.GL_LINE_LOOP)

        # Draw UI
        self._ui.draw()
Ejemplo n.º 6
0
    def __init__(self, sim, keyboard=None):
        self.sim = sim
        self.keyboard = keyboard

        # Setup
        persistence.create_data_folder()

        # Controller parameters
        self.mode = ModeEnum.SELECT
        self.ticks_per_secs = 50.0
        self.creatable_types = get_creatable_types()
        self.cur_creation_index = 0

        self._cur_selected = None
        self._ui = controller_ui.ControllerUI()

        # Graphics
        self._selection_ring = Shapes.make_circle(as_vertexlist=True)
Ejemplo n.º 7
0
    def draw(self, batch=None):

        indices, verts, colors = Shapes.make_circle(
            center=self.pos, radius=self.size, color=self.determine_color())

        if batch is None:
            # Just draw the shape immediately
            n = len(verts[1]) // 2
            pyglet.graphics.draw(n, pyglet.gl.GL_POLYGON, verts, colors)
        else:
            # Add indexed vertices to batch
            n = len(verts[1]) // 2
            batch.add_indexed(n, pyglet.gl.GL_TRIANGLES, None, indices, verts,
                              colors)

        if self.debug_view:
            self.draw_force_lines()
        if self.draw_trail_points:
            self.draw_trail()
Ejemplo n.º 8
0
    def draw(self, batch=None):

        color = self.colors_heatmap()  #(40, 10, 120)
        indices, verts, colors = Shapes.make_circle(n_points=20,
                                                    center=self.pos,
                                                    radius=self.size,
                                                    color=color)

        if batch is None:
            # Draw directly
            n = len(verts[1]) // 2
            pyglet.graphics.draw(n, pyglet.gl.GL_POLYGON, verts, colors)
        else:
            # Add indexed vertices to batch
            n = len(verts[1]) // 2
            batch.add_indexed(n, pyglet.gl.GL_TRIANGLES, None, indices, verts,
                              colors)

        # Debug view
        if self.debug_view:
            self.draw_debug_view()
Ejemplo n.º 9
0
    def draw(self):
        verts, colors = Shapes.make_rect(self.anchor, self.w, self.h, color=self.color)
        self.shape.vertices = verts[1]
        self.shape.draw(pyglet.gl.GL_POLYGON)

        super().draw()
Ejemplo n.º 10
0
    def draw_trail(self):
        """ Draws the trail of the particle as points in previous positions. """

        n = self.trail_points.length()
        verts, colors = Shapes.make_points(self.trail_points._list)
        pyglet.graphics.draw(n, pyglet.gl.GL_POINTS, verts, colors)