예제 #1
0
def _draw_sprite(state, canvas, view_pos, view_scale, sprite_name, texture, pos, scale, rotate, origin_xy):
        """
        TODO
        """
        rectangles_rotates_dict = state[globals.IDX_STATE_SPRITES][IDX_SPRITES_RECTS_ROTS]
        col = int(pos[0])
        row = int(pos[1])
        scaled_tile_size = tiles.get_tile_size(state) * view_scale

        tile_x = col * scaled_tile_size
        tile_y = row * scaled_tile_size

        draw_x = tile_x - view_pos[0] * scaled_tile_size
        draw_y = tile_y - view_pos[1] * scaled_tile_size

        draw_pos = (draw_x, draw_y)
        offset = (pos[0] - col, pos[1] - row,)
        offset_pos = (int(draw_pos[0] + scaled_tile_size * offset[0] + origin_xy[0]),
                                 int(draw_pos[1] + scaled_tile_size * offset[1] + origin_xy[1]))

        if rectangles_rotates_dict.has_key(sprite_name):
                rect, rot = rectangles_rotates_dict[sprite_name]
                if not rect.texture is texture:
                        rect.texture = texture

                pos_changed = (abs(rect.pos[0] - offset_pos[0]) > 1) or (abs(rect.pos[1] - offset_pos[1]) > 1)
                rot_changed = abs(rot.angle - rotate) > 1

                if pos_changed or rot_changed:
                        rect.pos = offset_pos
                        rot.angle = rotate
                        x = offset_pos[0]
                        y = offset_pos[1]
                        w = texture.size[0] * view_scale * scale[0]
                        h = texture.size[1] * view_scale * scale[1]
                        rot.origin = (x + w/2, y + h/2)
        else:
                with canvas:
                        PushMatrix()
                        x = offset_pos[0]
                        y = offset_pos[1]
                        w = texture.size[0] * view_scale * scale[0]
                        h = texture.size[1] * view_scale * scale[1]
                        rot = Rotate()
                        rot.angle = rotate
                        rot.axis = (0, 0, 1)
                        rot.origin = (x + w/2, y + h/2)
                        rect = Rectangle(
                                texture=texture,
                                pos=offset_pos,
                                size=(w, h)
                                )
                        rectangles_rotates_dict[sprite_name] = (rect, rot,)
                        PopMatrix()
예제 #2
0
    def draw_quad(self, star_list):
        star_tex = Image('star1.png').texture

        with self.canvas:
            for star in star_list:
                size = .5 * star[2]
                PushMatrix()
                t = Translate()
                r = Rotate()
                r.angle = star[3]
                Quad(texture=star_tex,
                     points=(-size, -size, size, -size, size, size, -size,
                             size))
                t.xy = star[0], star[1]
                PopMatrix()
예제 #3
0
 def draw_quad(self, star_list):
     star_tex = Image('star1.png').texture
    
     with self.canvas:
         for star in star_list:
             size = .5*star[2]
             PushMatrix()
             t = Translate()
             r = Rotate()
             r.angle = star[3]
             Quad(texture = star_tex, points = (-size, 
                 -size, size, -size,
                 size, size, -size, size))
             t.xy = star[0], star[1]
             PopMatrix()