class WeaponBar(object): """docstring for WeaponBar""" def __init__(self, batch, scale): super(WeaponBar, self).__init__() self.batch = batch self.weapons = {} self.ammos = [] self.tris = [] self.scale = scale def __len__(self): return len(self.weapons) def init_bar(self, weapons): try: if self.ammolayout._document: self.ammolayout.delete() for tri in self.tris: tri.remove() except AttributeError: pass ammotext = '\t'.join(str(w.ammo) for key, w in weapons.iteritems() if key != 'w0') self.ammos = ammotext.split('\t') self.ammodoc = FormattedDocument(ammotext) self.ammodoc.set_style(0, len(ammotext), dict(color=[255]*4, tab_stops=[120*(i+1) for i in range(6)], font_size=24, align='center', wrap=False)) self.ammolayout = IncrementalTextLayout(self.ammodoc, width=600, height=50, batch=self.batch, multiline=True) self.ammolayout.x = (1280 / 2) * self.scale.x self.ammolayout.y = 20 * self.scale.y self.ammolayout.anchor_x = 'center' self.ammolayout.anchor_y = 'bottom' w = self.ammolayout.content_width colorlist = [weaponcolors[key] for key in weapons if key != 'w0'] self.tris = [Triangle(640*self.scale.x-w/2-52+120*i, 35*self.scale.y, 50, 50, col, self.batch, 0, 0) for i, col in enumerate(colorlist)] def update(self, weapons): if len(weapons) != len(self.weapons): self.init_bar(weapons) self.weapons = weapons.copy() else: ammotext = '\t'.join(str(w.ammo) for key, w in weapons.iteritems() if key != 'w0') ammos = ammotext.split('\t') self.ammolayout.begin_update() for i, a in enumerate(ammos): if a != self.ammos[i]: ln = sum(len(self.ammos[j]) for j in range(i)) + i self.ammodoc.delete_text(ln, ln + len(self.ammos[i])) self.ammodoc.insert_text(ln, a) self.ammolayout.end_update() self.ammos = ammos def remove(self): try: self.weapons = {} self.ammolayout.delete() for tri in self.tris: tri.remove() except AttributeError: pass
class LicensePageV2(UIObject, ABC): def __init__(self, logger, parent_viewport): super().__init__(logger, parent_viewport) self.license_text = '' self.document = None self.license_layout = None @final def on_activate(self): super().on_activate() if not self.document: self.document = FormattedDocument(text=self.license_text) self.document.set_style( 0, len(self.document.text), { 'font_name': 'Arial', 'font_size': get_bottom_bar_height(self.screen_resolution) // 5, 'bold': False, 'italic': False, 'color': (*WHITE_RGB, self.opacity), 'align': 'center' }) if not self.license_layout: self.license_layout = IncrementalTextLayout( document=self.document, width=self.viewport.x2 - self.viewport.x1, height=self.viewport.y2 - self.viewport.y1, multiline=True, batch=BATCHES['ui_batch'], group=GROUPS['button_text']) self.license_layout.x, self.license_layout.y = self.viewport.x1, self.viewport.y1 @final @window_size_has_changed def on_window_resize(self, width, height): super().on_window_resize(width, height) self.viewport.x1, self.viewport.x2 = self.parent_viewport.x1, self.parent_viewport.x2 self.viewport.y1 = self.parent_viewport.y1 + get_bottom_bar_height( self.screen_resolution) self.viewport.y2 = self.parent_viewport.y2 if self.is_activated: self.license_layout.x, self.license_layout.y = self.viewport.x1, self.viewport.y1 self.license_layout.width = self.viewport.x2 - self.viewport.x1 self.license_layout.height = self.viewport.y2 - self.viewport.y1 self.document.set_style(0, len(self.document.text), { 'font_size': get_bottom_bar_height(self.screen_resolution) // 5 }) @final @is_active @cursor_is_inside_the_text_box def on_mouse_scroll(self, x, y, scroll_x, scroll_y): self.license_layout.view_y += scroll_y * self.document.get_style( 'font_size') @final def on_update_opacity(self, new_opacity): super().on_update_opacity(new_opacity) if self.opacity <= 0: self.license_layout.delete() self.license_layout = None elif self.document: self.document.set_style(0, len(self.document.text), {'color': (*WHITE_RGB, self.opacity)})