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
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
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 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)
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
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