Example #1
0
def drawBoard(tiles):
    margin = 20
    tileSide = 120
    border = 20
    panel = document["board"]
    panel.clear()
    
    panelSide = 620
    
    
    
    
    for x in range(0, 4):
        xpos = margin + (margin * x) + (tileSide * x) + border
        for y in range(0, 4):
            ypos = margin + (margin * y) + (tileSide * y) + border
            rect = svg.rect(x=xpos, y=ypos, rx="5", ry="5", width=tileSide,
                            height=tileSide, fill="#444444")
            panel <= rect
            if(tiles[x][y] != 0):
                textX = xpos + (tileSide/2)
                textY = ypos + (tileSide/2) + (margin/2)
                tile = svg.text(str(tiles[x][y]), x=textX, y=textY, font_size=40,
                                 text_anchor="middle", fill="white")
                panel <= tile
Example #2
0
 def __init__(self, converter, pos):
     self.converter = converter
     self.position = pos
     self.circle = svg.circle(cx=0,
                              cy=0,
                              r=self.radius,
                              stroke="black",
                              stroke_width="4",
                              fill="black")
     self.circle.attrs["id"] = self.converter.name
     self.title = svg.text(self.converter.name,
                           x=0,
                           y=self.radius + 15,
                           z=10,
                           font_size=15,
                           text_anchor="middle")
     x, y = self.position
     self.circle.bind("click", self.clicked)
     self.circle.bind("contextmenu", self.right_clicked)
     self.circle.bind("mouseover", self.mouse_over)
     self.circle.bind("mouseout", self.mouse_out)
     self.connections = []
     self.hide_all()
     self.upgradable = False
     self.manual_property_set = False
     self.lastState = "unknown"
     # Add to html
     nodes_g = document['nodes']
     nodes_g <= self.circle
     nodes_g <= self.title
Example #3
0
    def create_hud_content(node):
        # As 0,0 is the start position
        Hud.hud_bounding = svg.rect(x=0, y=0, width=100, height=100, stroke="black", fill="white")
        Hud.hud_info = svg.text("", x=0, y=0, font_size=20,text_anchor="start")
        Hud.panel <= Hud.hud_bounding
        Hud.panel <= Hud.hud_info

        name = node.converter.name
        if node.converter.unstoppable:
            name += " - [Unstoppable]"
        Hud.hud_info <= Hud.create_tspan(name,x=Hud.border,dy=Hud.border,bold=True)
        Hud.create_converter_elements('Needs:',node.converter.needs,0,True)
        Hud.create_converter_elements('Produces:',node.converter.makes,0,True)
        # Hud.create_converter_elements('Upgrades:',node.converter.upgrades)

        hasUpgrade = False
        for u in node.converter.upgrades:
            if not u.bought:
                hasUpgrade = True
        if hasUpgrade:
            Hud.hud_info <= Hud.create_tspan('Upgrades:',x=Hud.border+10,dy=25,bold=True)
            for upgrade in node.converter.upgrades:
                if upgrade.bought:
                    continue
                Hud.hud_info <= Hud.create_tspan(upgrade.name,x=Hud.border+30)

                button = svg.rect(x=0, y=0, width=Hud.upgrade_button_size, height=Hud.upgrade_button_size, stroke="black", fill="white")
                hsx, hsy = Hud.hud_size()
                button.attrs['x'] = int(Hud.border + 15)
                button.attrs['y'] = int(hsy - Hud.upgrade_button_size)
                func = lambda ev, upgrade=upgrade: Hud.hud_upgrade_buy(ev,upgrade,node)
                button.bind("click", func)

                buy_icon_appearance_func = lambda upgrade=upgrade, button=button: Hud.upgrade_button_appearance(upgrade, button)
                Hud.upgrade_button_appearance(upgrade, button) # init
                Hud.upgrades.append(buy_icon_appearance_func) # refresh icon updater

                Hud.panel <= button

                if upgrade.all_requirements_bought():
                    Hud.create_converter_elements('Costs:',upgrade.costs,offset=30)
                    if upgrade is not upgrade_final:
                        Hud.create_converter_elements('Changes:',upgrade.changes,offset=30)
                else:
                    Hud.create_converter_elements('Requires:',upgrade.requires,offset=30)
Example #4
0
def set_board(g, fen):

    i = 0
    pieces = []
    ok = True

    for child in g:
        g.removeChild(child)

    for char in fen:
        #console.log('i %s char %s' % (i, char))
        if char == '/':
            continue
        if char in '12345678':
            i += int(char)
            continue
        if char == ' ':
            break
        if char.lower() not in 'pnbrqk':
            alert('fen "{}" is not correct'.format(fen))
            ok = False
            break

        x, y, name = get_piece_args(i, char)
        t = "translate({},{})".format(x, y)
        #console.log(t)
        use = svg.use(href='#' + name, transform=t)
        pieces.append(use)
        i += 1

    if ok:
        for p in pieces:
            #console.log('%s' % p)
            g.appendChild(p)

    text = svg.text(x=-24, y=69 * 7)
    text['class'] = 'board_fen'
    text <= fen
    g.appendChild(text)
Example #5
0
    def __init__(self, resource, line_height, line_width):
        self.graphic_container = svg.g()
        self.resource = resource
        self.item_height = line_height
        voffset = 5
        # Name string HACK:dominant-baseline
        self.text = svg.text(resource.name,
                             x=10,
                             y=voffset,
                             font_size=20,
                             text_anchor='start')
        self.text.attrs['dominant-baseline'] = "hanging"
        # Progress rectangle
        self.rect_width = 100
        rect_right_margin = 5
        rect_x_start = line_width - self.rect_width - rect_right_margin
        rect_y_start = voffset
        rect_height = 15
        rect_rx = 5
        self.rect = svg.rect(x=rect_x_start,
                             y=rect_y_start,
                             width=self.rect_width,
                             height=rect_height,
                             rx=0)
        self.number_text = svg.text("",
                                    x=line_width - rect_right_margin -
                                    (self.rect_width / 2),
                                    y=voffset + 2,
                                    font_size=16,
                                    text_anchor="middle",
                                    font_weight="bold")
        self.number_text.attrs['dominant-baseline'] = "hanging"
        # Contour rectangle
        id_str = ('contour_' + resource.name).replace(" ", "_")
        clip_id_str = ('clip_rect_' + resource.name).replace(" ", "_")
        clip_rect = svg.rect(x=rect_x_start,
                             y=rect_y_start,
                             width=self.rect_width,
                             height=rect_height,
                             rx=rect_rx,
                             stroke="black",
                             style={
                                 "fill-opacity": "0",
                                 "stroke-opacity": "1"
                             },
                             id=clip_id_str)
        # 'use' structure
        clip = svg.clipPath(id=id_str)
        clip <= clip_rect
        g = svg.g(style={"clip-path": "url(#" + id_str + ")"})
        g <= self.rect
        g <= svg.use(href="#" + clip_id_str)

        self.border = svg.rect(id="itemContainer_rect",
                               x=0,
                               y=0,
                               width=line_width,
                               height=line_height,
                               rx=rect_rx,
                               fill="grey",
                               style={"fill-opacity": "0.5"})
        self.border.attrs['visibility'] = 'hidden'
        self.graphic_container <= self.border

        # SVG elements
        self.graphic_container <= clip
        self.graphic_container <= g
        self.graphic_container <= self.text
        self.graphic_container <= self.number_text

        self.graphic_container.attrs['visibility'] = 'hidden'

        # Visible
        self.hidden = True
Example #6
0
class Hud:
    # Add g to the hud
    panel = document['hud']
    rect = panel.parent.getBoundingClientRect()
    width,height = rect.width,rect.height
    hud_info = svg.text("", x=0, y=0, font_size=20,text_anchor="start")
    hud_bounding = svg.rect(x=0, y=0, width=100, height=100, stroke="black", fill="white")
    upgrades = []
    # add to panel manually later
    active = False
    border = 10
    upgrade_button_size = 10

    def create_tspan(text,x,dy='1em',bold=False):
        if bold:
            id = "bold_text"
        else:
            id = "normal_text"
        return svg.tspan(text,id=f'{id}',x=x,dy=dy)

    def hud_clicked(event):
        event.stopPropagation()

    def clear_hud():
        Hud.panel.clear()
        Hud.hud_info.clear()
        Hud.upgrades.clear()
        Hud.panel.attrs["visibility"] = "hidden"

    def hud_size():
        brect = Hud.hud_info.getBBox()
        return int(brect.width), int(brect.height)

    def hud_upgrade_buy(event, upgrade, node):
        if upgrade.buy():
            Hud.show_info(node)
            # CHECK ENDING
            if upgrade is upgrade_final:
                trigger_ending_scene()
        event.stopPropagation()

    def create_converter_elements(title,elements,offset=0,boldTitle=False):
        if elements:
            Hud.hud_info <= Hud.create_tspan(title,x=Hud.border+10+offset,dy=25,bold=boldTitle)
            for element in elements:
                text = str(element)
                Hud.hud_info <= Hud.create_tspan(text,x=Hud.border+20+offset)

    def create_hud_content(node):
        # As 0,0 is the start position
        Hud.hud_bounding = svg.rect(x=0, y=0, width=100, height=100, stroke="black", fill="white")
        Hud.hud_info = svg.text("", x=0, y=0, font_size=20,text_anchor="start")
        Hud.panel <= Hud.hud_bounding
        Hud.panel <= Hud.hud_info

        name = node.converter.name
        if node.converter.unstoppable:
            name += " - [Unstoppable]"
        Hud.hud_info <= Hud.create_tspan(name,x=Hud.border,dy=Hud.border,bold=True)
        Hud.create_converter_elements('Needs:',node.converter.needs,0,True)
        Hud.create_converter_elements('Produces:',node.converter.makes,0,True)
        # Hud.create_converter_elements('Upgrades:',node.converter.upgrades)

        hasUpgrade = False
        for u in node.converter.upgrades:
            if not u.bought:
                hasUpgrade = True
        if hasUpgrade:
            Hud.hud_info <= Hud.create_tspan('Upgrades:',x=Hud.border+10,dy=25,bold=True)
            for upgrade in node.converter.upgrades:
                if upgrade.bought:
                    continue
                Hud.hud_info <= Hud.create_tspan(upgrade.name,x=Hud.border+30)

                button = svg.rect(x=0, y=0, width=Hud.upgrade_button_size, height=Hud.upgrade_button_size, stroke="black", fill="white")
                hsx, hsy = Hud.hud_size()
                button.attrs['x'] = int(Hud.border + 15)
                button.attrs['y'] = int(hsy - Hud.upgrade_button_size)
                func = lambda ev, upgrade=upgrade: Hud.hud_upgrade_buy(ev,upgrade,node)
                button.bind("click", func)

                buy_icon_appearance_func = lambda upgrade=upgrade, button=button: Hud.upgrade_button_appearance(upgrade, button)
                Hud.upgrade_button_appearance(upgrade, button) # init
                Hud.upgrades.append(buy_icon_appearance_func) # refresh icon updater

                Hud.panel <= button

                if upgrade.all_requirements_bought():
                    Hud.create_converter_elements('Costs:',upgrade.costs,offset=30)
                    if upgrade is not upgrade_final:
                        Hud.create_converter_elements('Changes:',upgrade.changes,offset=30)
                else:
                    Hud.create_converter_elements('Requires:',upgrade.requires,offset=30)

    def show_info(node):
        Hud.clear_hud() # clear
        Hud.create_hud_content(node)
        # Create bounding rect
        hsx, hsy = Hud.hud_size()
        Hud.hud_bounding.attrs["width"] = hsx + Hud.border*2
        Hud.hud_bounding.attrs["height"] = hsy + Hud.border*2
        # Set text start
        Hud.hud_info.attrs["y"] = 0
        # Translate all element
        tx = node.position[0] + node.radius + 5
        ty = node.position[1] - node.radius
        Hud.panel.attrs["transform"] = f'translate({tx},{ty})'
        # Visibility
        Hud.panel.attrs["visibility"] = "visible"

    def upgrade_button_appearance(upgrade, button):
        color = "red"
        if upgrade.isBuyable():
            color = "LawnGreen"
        button.style["stroke"] = "black"
        button.style["fill"] = color

    def refresh_buy_icon():
        for fn in Hud.upgrades:
            fn()
 def __init__(self, text, center=(0, 0), size=12):
     GraphicalObject.__init__(self)
     self._center = center
     x = center[0]
     y = center[1]
     self._svgGraphic = svg.text(text, x=x, y=y, text_anchor="middle", font_size=size)
pattern = svg.pattern(id="wallpaper", width = "100%", height= "100%")
img = svg.image(xlink_href="force.jpg", width = "1", height = "1", transform = "translate(1,1) , rotate(180)")
window.addAttribute(pattern,"patternContentUnits","objectBoundingBox")
window.addAttribute(img,"preserveAspectRatio","none")

# Append
pattern <= img
board <= pattern

#img.transform = "rotate(180,1,1)"

#board = document.getElementById('board')
#img = document.getElementById('image')
#pattern = document.getElementById('pattern')

text1 = svg.text(str(x1) + " " + str(y1), x = x1, y=y1, fill  = "#FFFFFF")
text2 = svg.text(str(x2) + " " + str(y2), x = x2, y=y2, fill  = "#FFFFFF")
text3 = svg.text(str(x3) + " " + str(y3), x = x3, y=y3, fill  = "#FFFFFF")
text4 = svg.text(str(x4) + " " + str(y4), x = x4, y=y4, fill  = "#FFFFFF")
	
# Create string of points for svg_polygon
Points = str(x1) + "," + str(y1) + " " + str(x2) + "," + str(y2) + " " + str(x3) + "," + str(y3) + " " + str(x4) + "," + str(y4)
	
# Create polygon
WallpaperDiv = svg.polygon(id="no id",fill = "url(#wallpaper)", stroke = "black", stroke_width = "1",
					points=Points)


board <= WallpaperDiv
board <= text1
board <= text2
def create_text(text, x, y, fontSize = "18"):
	(X1,Y1) = mapCoordsToDIV(x,y)
	textSvg = svg.text(text, x = X1, y = Y1, fill = "black", text_anchor = "middle", font_size = fontSize, font_weight = "bold")
	return textSvg