def nuklearSfmlDrawRectFilled(self,cmd,window):
     p=pynk.ffi.cast("struct nk_command_rect_filled*",cmd)
     rectangle=sf.RectangleShape()
     rectangle.fill_color=sf.Color(p.color.r, p.color.g, p.color.b, p.color.a)
     rectangle.size=sf.Vector2(p.w, p.h)
     rectangle.position=sf.Vector2(p.x, p.y)
     window.draw(rectangle)
Exemple #2
0
    def calculateCorners(self):
        self.theta = -self.rect.rotation * math.pi / 180.0

        self.top_left_corner_x = self.rect.position.x - self.rect.size.x / 2.0 * math.cos(
            self.theta) - self.rect.size.y / 2.0 * math.sin(self.theta)
        self.top_left_corner_y = self.rect.position.y + self.rect.size.x / 2.0 * math.sin(
            self.theta) - self.rect.size.y / 2.0 * math.cos(self.theta)

        self.top_right_corner_x = self.rect.position.x + self.rect.size.x / 2.0 * math.cos(
            self.theta) - self.rect.size.y / 2.0 * math.sin(self.theta)
        self.top_right_corner_y = self.rect.position.y - self.rect.size.x / 2.0 * math.sin(
            self.theta) - self.rect.size.y / 2.0 * math.cos(self.theta)

        self.bot_right_corner_x = self.rect.position.x + self.rect.size.x / 2.0 * math.cos(
            self.theta) + self.rect.size.y / 2.0 * math.sin(self.theta)
        self.bot_right_corner_y = self.rect.position.y - self.rect.size.x / 2.0 * math.sin(
            self.theta) + self.rect.size.y / 2.0 * math.cos(self.theta)

        #self.bot_left_corner_x = self.rect.position.x - self.rect.size.x / 2.0 * math.cos(self.theta) + self.rect.size.y / 2.0 * math.sin(self.theta)
        #self.bot_left_corner_y = self.rect.position.y + self.rect.size.x / 2.0 * math.sin(self.theta) + self.rect.size.y / 2.0 * math.cos(self.theta)

        self.corners = [
            sf.Vector2(self.top_left_corner_x, self.top_left_corner_y),
            sf.Vector2(self.top_right_corner_x, self.top_right_corner_y),
            sf.Vector2(self.bot_right_corner_x, self.bot_right_corner_y)
        ]  # sf.Vector2(self.bot_left_corner_x, self.bot_left_corner_y)]
Exemple #3
0
    def set_icon(self, icon):
        rect = self.atlas.get_rect(icon)

        self.vertex(0).tex_coords = sf.Vector2(rect.left, rect.top)
        self.vertex(1).tex_coords = sf.Vector2(rect.right, rect.top)
        self.vertex(2).tex_coords = sf.Vector2(rect.right, rect.bottom)
        self.vertex(3).tex_coords = sf.Vector2(rect.left, rect.bottom)
Exemple #4
0
def checkNavKeys(w, tDelta, mPos):
    if KeyPressed(Key.HOME):
        r = w.view.rotation
        if r > 180: r -= 360
        w.view.rotate(-r * tDelta * 8)

        z = 1.0 - w.view.size.y
        w.view.zoom(ZOOMSTEP / (ZOOMSTEP - tDelta * z * 8))

        dx, dy = (sf.Vector2(.5, .5) - w.view.center) * tDelta * 8
        w.view.move(dx, dy)

    if KeyPressed(Key.Q): rotateViewAroundPoint(w, -90 * tDelta, mPos)
    if KeyPressed(Key.E): rotateViewAroundPoint(w, 90 * tDelta, mPos)

    if KeyPressed(Key.PAGE_UP):
        zoomViewOnPoint(w, (ZOOMSTEP - tDelta) / ZOOMSTEP, mPos)
    if KeyPressed(Key.PAGE_DOWN):
        zoomViewOnPoint(w, ZOOMSTEP / (ZOOMSTEP - tDelta), mPos)

    dx, dy = 0, 0
    if KeyPressed(Key.A): dx = -1
    if KeyPressed(Key.D): dx = 1
    if KeyPressed(Key.W): dy = -1
    if KeyPressed(Key.S): dy = 1
    if dx or dy:
        scale = min(list(w.view.size))
        d = dx, dy
        r = [(0, 1), (1, 1), (1, 0), (1, -1), (0, -1), (-1, -1), (-1, 0),
             (-1, 1)].index(d)
        r = r * 45 - w.view.rotation
        a = r * deg2rad
        v = sf.Vector2(sin(a), cos(a))
        w.view.center += v * scale * tDelta / 4.0
Exemple #5
0
    def _rem_varray(self, x, y):
        vert_id = (x + y * self._width) * 4

        self._varray[vert_id].position = sf.Vector2(x * self._tile_width, y * self._tile_height)
        self._varray[vert_id + 1].position = sf.Vector2(x * self._tile_width, y * self._tile_height)
        self._varray[vert_id + 2].position = sf.Vector2(x * self._tile_width, y * self._tile_height)
        self._varray[vert_id + 3].position = sf.Vector2(x * self._tile_width, y * self._tile_height)
 def nuklearSfmlDrawRectOutline(self,cmd,window):
     p=pynk.ffi.cast("struct nk_command_rect*",cmd)
     rect=sf.RectangleShape()
     rect.size=sf.Vector2(p.w, p.h)
     rect.position=sf.Vector2(p.x, p.y)
     rect.outline_thickness=p.line_thickness
     rect.fill_color=sf.Color(0,0,0,0)
     rect.outline_color=sf.Color(p.color.r, p.color.g, p.color.b, p.color.a)
     window.draw(rect)
Exemple #7
0
    def set_position(self, pos):
        rect = sf.Rectangle(
            sf.Vector2(pos.x * self.atlas.size.x, pos.y * self.atlas.size.y),
            self.atlas.size)

        self.vertex(0).position = sf.Vector2(rect.left, rect.top)
        self.vertex(1).position = sf.Vector2(rect.right, rect.top)
        self.vertex(2).position = sf.Vector2(rect.right, rect.bottom)
        self.vertex(3).position = sf.Vector2(rect.left, rect.bottom)
Exemple #8
0
 def open(self):
     pos = self.position.__copy__() + sf.Vector2(self.style.padding[3],
                                                 self.style.padding[0])
     for i, btn in enumerate(self._buttons):
         pos += sf.Vector2(0, btn.style.margin[0])
         btn.position = pos
         btn.position += sf.Vector2(btn.style.margin[3], 0)
         pos += sf.Vector2(0, btn.style.bounds.y)
     super().open()
 def nuklearSfmlDrawTriangleFilled(self,cmd,window):
     p=pynk.ffi.cast("struct nk_command_triangle_filled*",cmd)
     convex=sf.ConvexShape()
     convex.point_count=3
     convex.set_point(0,sf.Vector2(p.a.x, p.a.y))
     convex.set_point(1, sf.Vector2(p.b.x, p.b.y))
     convex.set_point(2, sf.Vector2(p.c.x, p.c.y))
     convex.fill_color=sf.Color(p.color.r, p.color.g, p.color.b, p.color.a)
     window.draw(convex)
Exemple #10
0
    def calculateAxis(self):
        self.AB_axis = sf.Vector2(
            self.top_right_corner_x - self.top_left_corner_x,
            self.top_right_corner_y - self.top_left_corner_y)
        self.BC_axis = sf.Vector2(
            self.bot_right_corner_x - self.top_right_corner_x,
            self.bot_right_corner_y - self.top_right_corner_y)

        self.axis = [self.AB_axis, self.BC_axis]
 def nuklearSfmlDrawLine(self,cmd,window):
     p=pynk.ffi.cast("struct nk_command_line*",cmd)
     rect=sf.RectangleShape()
     rect.size=sf.Vector2(p.line_thickness, abs(p.begin.y-p.end.y))
     rect.position=sf.Vector2(p.begin.x, p.begin.y)
     rect.outline_thickness=p.line_thickness
     rect.fill_color=sf.Color(p.color.r, p.color.g, p.color.b, p.color.a)
     rect.outline_color=sf.Color(p.color.r, p.color.g, p.color.b, p.color.a)
     window.draw(rect)
Exemple #12
0
 def __init__(self, position, fill_color):
     super().__init__()
     self.growing = True
     self.sprite = sf.CircleShape(33)
     self.sprite.fill_color = sf.Color(fill_color.r, fill_color.g,
                                       fill_color.b, 50)
     self.sprite.position = position - sf.Vector2(0, 5)
     self.sprite2 = sf.CircleShape(50)
     self.sprite2.fill_color = sf.Color(fill_color.r, fill_color.g,
                                        fill_color.b, 190)
     self.sprite2.position = position - sf.Vector2(0, 5)
Exemple #13
0
    def isPointInside(self, m):
        AM_axis = sf.Vector2(m.x - self.top_left_corner_x,
                             m.y - self.top_left_corner_y)
        BM_axis = sf.Vector2(m.x - self.top_right_corner_x,
                             m.y - self.top_right_corner_y)
        AB_AM_dot = self.AB_axis.x * AM_axis.x + self.AB_axis.y * AM_axis.y
        BC_BM_dot = self.BC_axis.x * BM_axis.x + self.BC_axis.y * BM_axis.y

        if 0 <= AB_AM_dot and AB_AM_dot <= self.AB_axis.x**2 + self.AB_axis.y**2 and 0 <= BC_BM_dot and BC_BM_dot <= self.BC_axis.x**2 + self.BC_axis.y**2:
            return True

        return False
Exemple #14
0
 def __init__(self, name, render_order):
     super().__init__()
     self.name = name
     self.render_order = render_order
     self.reference = None
     self.state = CameraState()
     self.frames_delay = 15
     self.base_pos = sf.Vector2(0, 0)
     self.base_size = sf.Vector2(0, 0)
     self.vp_base_pos = sf.Vector2(0, 0)
     self.vp_base_size = sf.Vector2(1, 1)
     self.offset = sf.Vector2(0, 0)
     self.visible: bool = True
     self._scene = []
Exemple #15
0
 def update(self):
     if self.shape.size.x/2 > self.limit:
         self.end()
     elif self.shape.size.x/2 <= self.limit:
         self.shape.size += sf.Vector2(self.speed, self.speed)
         self.shape.rotate(self.speed*2)
     self.shape.origin = (self.shape.size.x/2, self.shape.size.y/2)
Exemple #16
0
    def __init__(self, path: str):
        self.name = os.path.basename(path)
        self.path = path
        self.root = ElementTree.parse(
            find_resource(os.path.join(os.path.dirname(self.path),
                                       self.name))).getroot()

        self._size: sf.Vector2 = sf.Vector2(int(self.root.get('width')),
                                            int(self.root.get('height')))
        self._tile_size: sf.Vector2 = sf.Vector2(
            int(self.root.get('tilewidth')), int(self.root.get('tileheight')))

        self.tilesets: List[MapTileset] = []
        self.layers: Dict[str, TileLayer] = {}
        self.objectgroups: Dict[str, ObjectGroup] = {}
        self._collisions = []
 def ex(self, point):
     r = math.sqrt(pow(point.x, 2) + pow(point.y, 2))
     theta = math.atan2(point.x, point.y)
     p0 = math.sin(theta + r)
     p1 = math.cos(theta - r)
     return sf.Vector2(r * (pow(p0, 3) + pow(p1, 3)),
                       r * (pow(p0, 3) - pow(p1, 3)))
 def disc(self, point):
     r = math.sqrt(pow(point.x, 2) + pow(point.y, 2))
     theta = math.atan2(point.x, point.y)
     return sf.Vector2(
         theta / 3.1415 * math.sin(3.1415 * r) *
         self.ifs_general.boundedFunctionScale, theta / 3.1415 *
         math.cos(3.1415 * r) * self.ifs_general.boundedFunctionScale)
Exemple #19
0
    def _calc_point(self, index: int):
        pi = 3.141592654
        angle = index * 2 * pi / self.point_count - pi / 2
        x = math.cos(angle) * self._radius.x
        y = math.sin(angle) * self._radius.y

        return sf.Vector2(self._radius.x + x, self._radius.y + y)
Exemple #20
0
 def get_tile_tex_coord(self, id: int):
     if id < self.tile_count:
         tx = (id % self.columns) * self.tile_width
         ty = (id // self.columns) * self.tile_height
         return sf.Vector2(tx, ty)
     else:
         raise IndexError(f'Tile id {id} not found in tileset {self.name}.')
Exemple #21
0
    def __init__(self, name: str, data, gridsize: int = 16):
        super().__init__()
        self.data = data
        self.name = name
        self._anim_state = "idle"

        self.anims: Dict[str, Anim] = self.data.anims
        self.anim_player: AnimPlayer = AnimPlayer(self.anims[self._anim_state])
        self.animate = False if self.anims is None else True

        self.sprite = sf.Sprite(self.data.texture)
        self.sprite.texture_rectangle = self.anims[
            self.anim_state].frames[0].rectangle
        self.sprite.origin = self.anims[self.anim_state].frames[0].origin
        self.direction = sf.Vector2(1, 1)

        self.gx = self.sprite.position.x
        self.gy = self.sprite.position.y

        self.rx = 0
        self.ry = 0

        self.collision_box = self.global_bounds
        self.collision_box_shape = sf.RectangleShape(
            (self.collision_box.width, self.collision_box.height))
        self.collision_box_shape.position = (self.collision_box.left,
                                             self.collision_box.top)
        self.collision_box_shape.fill_color = sf.Color(200, 0, 0, 150)

        self.gridsize = gridsize
Exemple #22
0
def moveXModulo(vin, x, mod):
    xin = vin.x
    yin = vin.y

    newX = abs((xin + x) % mod)

    return sf.Vector2(newX, yin)
 def nuklearSfmlDrawCircleFilled(self,cmd,window):
     p=pynk.ffi.cast("struct nk_command_circle_filled*",cmd)
     circle=sf.CircleShape()
     circle.radius=p.h/2
     circle.position=sf.Vector2(p.x, p.y)
     circle.fill_color=sf.Color(p.color.r, p.color.g, p.color.b, p.color.a)
     window.draw(circle)
Exemple #24
0
    def add_icon(self, name):
        x, y, path = name.split(':')
        pos = sf.Vector2(int(x), int(y))

        rect = sf.Rectangle(
            sf.Vector2(pos.x * self.size.x, pos.y * self.size.y), self.size)

        tex = self.tex_pool.get(path)
        spr = sf.Sprite(tex, rect)
        spr.position = self.get_pos(self.next_id)

        self.render.draw(spr)

        icon = self.next_id
        self.next_id += 1

        return icon
Exemple #25
0
    def build_cell(self, dist):
        cell_size = self.size / 2

        is_leaf = cell_size.x <= 2 or cell_size.y <= 2

        if is_leaf:
            cell_origin = sf.Vector2(self.origin.x + (-1 if dist.x < 0 else 0) * cell_size.x,
                                     self.origin.y + (-1 if dist.y < 0 else 0) * cell_size.y)
        else:
            cell_origin = sf.Vector2(self.origin.x + (-1 if dist.x < 0 else 1) * cell_size.x // 2,
                                     self.origin.y + (-1 if dist.y < 0 else 1) * cell_size.y // 2)

        cell = ChunkTree(origin=cell_origin,
                         size=cell_size,
                         loader=self.loader,
                         is_leaf=is_leaf)
        return cell
 def diamond(self, point):
     r = math.sqrt(pow(point.x, 2) + pow(point.y, 2))
     theta = math.atan2(point.x, point.y)
     return sf.Vector2(
         math.sin(theta) * math.cos(r) *
         self.ifs_general.boundedFunctionScale,
         math.cos(theta) * math.sin(r) *
         self.ifs_general.boundedFunctionScale)
Exemple #27
0
    def init(self):
        if not self.loaded:
            self.loader = ChunkLoader(level_id=self.id,
                                      save_file=self.save_file)

            self.chunks = ChunkTree(origin=sf.Vector2(0, 0),
                                    size=self.size,
                                    loader=self.loader)
            self.loaded = True
Exemple #28
0
 def __init__(self, name, save_file):
     """
     Creates an empty world
     """
     self.id = None
     self.save_file = save_file
     self.name = name
     self.size = sf.Vector2(16, 16)
     self.regions = dict()
 def julia(self, point):
     omega = int(random.random() + 0.5) * 3.1415
     sqrtr = math.sqrt(math.sqrt(point.x**2 + point.y**2))
     theta = math.atan2(point.x, point.y)
     return sf.Vector2(
         sqrtr * math.cos(theta / 2 + omega) *
         self.ifs_general.boundedFunctionScale,
         sqrtr * math.sin(theta / 2 + omega) *
         self.ifs_general.boundedFunctionScale)
Exemple #30
0
 def update(self):
     if self.shapes[0].size.x == 0:
         self.end()
     elif self.shapes[0].size.x > self.speed:
         self.shapes[0].size -= sf.Vector2(self.speed, self.speed)
         self.shapes[0].rotate(self.speed*2)
     else:
         self.shapes[0].size = (0, 0)
     self.shapes[0].origin = (self.shapes[0].size.x/2, self.shapes[0].size.y/2)