def draw_sentry_card(self, metadata, card, svg, svg_group): id = metadata['id'] attrs = card # Validate attributes self.validate_attrs(attrs) # Build list of template ids and then load from svg file. svg_ids = [] svg_ids.append('sentry-title') svg_ids.extend(['icon-star-{0}'.format(n) for n in [1,2,3]]) svg_ids.append('sentry-image') svg_ids.append('sentry-flavor') svg_ids.extend(['sentry-attack-{0}'.format(d) for d in [1,2]]) svg_ids.extend(['sentry-detect-{0}'.format(d) for d in ['yes', 'no']]) svg_ids.extend(['respawn-{0}'.format(d) for d in ['yes', 'no']]) svg.load_ids(WovenSentryCards.CARD_TEMPLATE, svg_ids) # Draw artifact title. title = svg.add_loaded_element(svg_group, 'sentry-title') SVG.set_text(title, "Sentry") svg.add_loaded_element(svg_group, 'sentry-image') svg.add_loaded_element(svg_group, 'sentry-attack-{0}'.format(attrs['attack'])) svg.add_loaded_element(svg_group, 'sentry-detect-{0}'.format(attrs['detect'])) svg.add_loaded_element(svg_group, 'respawn-{0}'.format(attrs['respawn'])) flavor = svg.add_loaded_element(svg_group, 'sentry-flavor') SVG.set_text(flavor, "Detect Range = 1") self.draw_vp(attrs['vp'], svg, svg_group)
def draw_watcher_card(self, metadata, card, svg, svg_group): id = metadata['id'] attrs = card # Validate attributes self.validate_attrs(attrs) name = attrs['name'] # Build list of template ids and then load from svg file. svg_ids = [] svg_ids.append('watcher-title') svg_ids.extend(['icon-star-{0}'.format(n) for n in [1,2,3]]) svg_ids.append('watcher-image') svg_ids.append('watcher-flavor') svg_ids.extend(['attack-{0}'.format(n) for n in [2,3]]) svg_ids.extend(['pursuit-{0}'.format(n) for n in [1,2]]) svg_ids.extend(['detect-{0}'.format(d) for d in ['yes', 'no']]) svg_ids.extend(['target-{0}'.format(t) for t in ['next', 'skip', 'reverse']]) svg.load_ids(WovenWatcherCards.CARD_TEMPLATE, svg_ids) # Draw artifact title. title = svg.add_loaded_element(svg_group, 'watcher-title') SVG.set_text(title, "Watcher") svg.add_loaded_element(svg_group, 'watcher-image') svg.add_loaded_element(svg_group, 'attack-{0}'.format(attrs['attack'])) svg.add_loaded_element(svg_group, 'detect-{0}'.format(attrs['detect'])) svg.add_loaded_element(svg_group, 'pursuit-{0}'.format(attrs['pursuit'])) svg.add_loaded_element(svg_group, 'target-{0}'.format(attrs['dir'])) flavor = svg.add_loaded_element(svg_group, 'watcher-flavor') SVG.set_text(flavor, "Detect Range = 3") self.draw_vp(attrs['vp'], svg, svg_group)
def draw_flavor(self, attrs, attr_name, svg, svg_group): if not attr_name in attrs: return text = attrs[attr_name] if text == '': return flavor = svg.add_loaded_element(svg_group, 'artifact-flavor') SVG.set_text(flavor, text)
def draw_description(self, attrs, attr_name, svg, svg_group): if not attr_name in attrs: return text = attrs[attr_name] if text == '': return desc = svg.add_loaded_element(svg_group, 'artifact-description') SVG.set_text(desc, text)
def draw_bonus(self, attrs, attr_name, svg, svg_group): if not attr_name in attrs: return text = attrs[attr_name] if text == '': return svg.add_loaded_element(svg_group, 'artifact-bonus-border') bonus = svg.add_loaded_element(svg_group, 'artifact-bonus') SVG.set_text(bonus, text)
def draw_artifact_card(self, metadata, card, svg, svg_group): id = metadata['id'] name = card[0] attrs = card[1] # Validate attributes self.validate_attrs(name, attrs) # Build list of template ids and then load from svg file. svg_ids = [] svg_ids.append('artifact-title') svg_ids.extend(['icon-star-{0}'.format(n) for n in [1,2,3]]) svg_ids.append('artifact-description') svg_ids.append('artifact-extra-action') svg_ids.append('artifact-bonus') svg_ids.append('artifact-bonus-border') svg_ids.append('artifact-flavor') #svg_ids.append('separator') svg_ids.extend(['op-{0}'.format(op) for op in valid_ops]) svg.load_ids(WovenArtifactCards.CARD_TEMPLATE, svg_ids) # Add Op masters (hidden, used for cloning). g_masters = SVG.group('masters') g_masters.set_style("display:none") SVG.add_node(svg_group, g_masters) for e in [ 'op-tapestry', 'op-eye', 'op-mmove', 'op-thread', 'op-action', ]: svg.add_loaded_element(g_masters, e) # Draw artifact title. title = svg.add_loaded_element(svg_group, 'artifact-title') SVG.set_text(title, name) self.draw_description(attrs, 'description', svg, svg_group) svg.add_loaded_element(svg_group, 'artifact-extra-action') self.draw_bonus(attrs, 'bonus', svg, svg_group) self.draw_flavor(attrs, 'flavor', svg, svg_group) #svg.add_loaded_element(svg_group, 'separator') # Draw alternate action. #svg.add_loaded_element(svg_group, 'op-{0}'.format(attrs['op'])) self.draw_vp(attrs['vp'], svg, svg_group)
def draw_description(self, id, raw_desc, svg, svg_group): text = svg.add_loaded_element(svg_group, 'spell-description') SVG.set_text(text, self.expand_desc(raw_desc))
def draw_spell_card(self, metadata, card, svg, svg_group): id = metadata['id'] name = card[0] attrs = card[1] desc = card[2] # Validate attributes if attrs['category'] != 'blank': self.validate_attrs(name, attrs) pattern_id = attrs['pattern'] pattern = self.card_patterns[pattern_id]['pattern'] if attrs['category'] != 'blank': self.record_spell_info(name, pattern, attrs, desc) if attrs['category'] != 'blank' and pattern_id != 'blank': pe_tag = self.pattern_key(pattern) + '-' + attrs['element'] if pe_tag in self.pattern_elements: raise Exception( 'Pattern for "{0:s}" already used for "{1:s}"'.format( name, self.pattern_elements[pe_tag])) self.pattern_elements[pe_tag] = name # Validate desc self.validate_desc(name, desc) # Verify pattern matches spell element element = attrs['element'] pelem_data = self.card_patterns[pattern_id]['elements'] pelems = [] if pelem_data == "none": pelems.append("none") else: pelems = [elem_map[p] for p in pelem_data] if not element in pelems: raise Exception( "{0:s}: Spell pattern does not match element {1:s}".format( name, element)) # Build list of template ids and then load from svg file. svg_ids = [] svg_ids.extend(['element-{0}'.format(elem_map[e]) for e in elem_map]) svg_ids.append('spell-title') svg_ids.append('spell-pattern-border') svg_ids.append('spell-description') svg_ids.append('spell-id') svg_ids.extend(['icon-star-{0}'.format(n) for n in [1, 2, 3]]) svg_ids.append('icon-vp') svg_ids.append('spell-flavor') svg_ids.append('separator') svg_ids.extend(['op-{0}'.format(op) for op in valid_ops]) svg.load_ids(WovenSpellCards.CARD_TEMPLATE, svg_ids) # Add Element and Op masters (hidden, used for cloning). g_masters = SVG.group('masters') g_masters.set_style("display:none") SVG.add_node(svg_group, g_masters) for e in [ 'op-tapestry', 'op-eye', 'op-mmove', 'op-thread', 'op-action', 'element-air', 'element-earth', 'element-fire', 'element-water', ]: svg.add_loaded_element(g_masters, e) if attrs['category'] != 'blank': # Draw spell title. title = svg.add_loaded_element(svg_group, 'spell-title') SVG.set_text(title, name) # Draw elements in title bar elemaster = '#element-{0}'.format(element) SVG.add_node(svg_group, SVG.clone(0, elemaster, 4, 4)) SVG.add_node(svg_group, SVG.clone(0, elemaster, 54, 4)) # Draw spell id. id_text = svg.add_loaded_element(svg_group, 'spell-id') SVG.set_text( id_text, "{0:d}/{1:d}".format(spell_card_revision, attrs['id'])) # Draw flavor text (if present). if 'flavor' in attrs: flavor_text = svg.add_loaded_element(svg_group, 'spell-flavor') SVG.set_text(flavor_text, attrs['flavor']) svg.add_loaded_element(svg_group, 'separator') # Draw alternate action. svg.add_loaded_element(svg_group, 'op-{0}'.format(attrs['op'])) # Add spell pattern. self.draw_pattern(pattern_id, pattern, element, svg_group) svg.add_loaded_element(svg_group, 'spell-pattern-border') if attrs['category'] != 'blank': self.draw_description(attrs['id'], desc, svg, svg_group) self.draw_vp(attrs['vp'], svg, svg_group)