class ScavengerHuntEffect: images = None def __init__(self, beanAmount): if not ScavengerHuntEffect.images: ScavengerHuntEffect.images = loader.loadModel('phase_4/models/props/tot_jar') self.npRoot = DirectFrame(parent=aspect2d, relief=None, scale=0.75, pos=(0, 0, 0.6)) if beanAmount > 0: self.npRoot.setColorScale(VBase4(1, 1, 1, 0)) self.jar = DirectFrame(parent=self.npRoot, relief=None, image=ScavengerHuntEffect.images.find('**/tot_jar')) self.jar.hide() self.eventImage = NodePath('EventImage') self.eventImage.reparentTo(self.npRoot) self.countLabel = DirectLabel(parent=self.jar, relief=None, text='+0', text_pos=(0.02, -0.2), text_scale=0.25, text_fg=(0.95, 0.0, 0, 1), text_font=ToontownGlobals.getSignFont()) def countUp(t, startVal, endVal): beanCountStr = startVal + t * (endVal - startVal) self.countLabel['text'] = '+' + `(int(beanCountStr))` def setCountColor(color): self.countLabel['text_fg'] = color self.track = Sequence(LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 1), startColorScale=VBase4(1, 1, 1, 0)), Wait(1), Func(self.jar.show), LerpColorScaleInterval(self.eventImage, 1, colorScale=VBase4(1, 1, 1, 0), startColorScale=VBase4(1, 1, 1, 1)), Parallel(LerpScaleInterval(self.npRoot, 1, scale=0.5, startScale=0.75), LerpPosInterval(self.npRoot, 1, pos=VBase3(-0.9, 0, -0.83))), LerpFunc(countUp, duration=2, extraArgs=[0, beanAmount]), Func(setCountColor, VBase4(0.95, 0.95, 0, 1)), Wait(3), Func(self.destroy)) else: self.npRoot.setColorScale(VBase4(1, 1, 1, 0)) self.attemptFailedMsg() self.track = Sequence(LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 1), startColorScale=VBase4(1, 1, 1, 0)), Wait(5), LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 0), startColorScale=VBase4(1, 1, 1, 1)), Func(self.destroy)) def play(self): if self.npRoot: self.track.start() def stop(self): if self.track != None: if self.track.isPlaying(): self.track.finish() def cleanupIntervals(self, interval): while len(interval) > 0: if isinstance(interval[0], Sequence) or isinstance(interval[0], Parallel): self.cleanupIntervals(interval[0]) interval.pop(0) else: interval.pop(0) def destroy(self): self.stop() self.track = None if hasattr(self, 'eventImage') and self.eventImage: self.eventImage.detachNode() del self.eventImage if hasattr(self, 'countLabel') and self.countLabel: self.countLabel.destroy() del self.countLabel if hasattr(self, 'jar') and self.jar: self.jar.destroy() del self.jar if hasattr(self, 'npRoot') and self.npRoot: self.npRoot.destroy() del self.npRoot
class Splash: def __init__(self): props = WindowProperties(base.win.getProperties()) screen_width = props.getXSize() screen_height = props.getYSize() self.ratio = float(screen_width) / float(screen_height) self.text_scale = 0.03 self.text_offset = self.text_scale / 4 self.text_height = self.text_scale + self.text_offset self.image_scale = 0.3 self.bg_texture = loader.loadTexture("textures/splash-background.jpg") if settings.srgb: self.bg_texture.set_format(Texture.F_srgb) self.bg_texture.setWrapU(Texture.WM_clamp) self.bg_texture.setWrapV(Texture.WM_clamp) self.bg_texture_ratio = float( self.bg_texture.get_x_size()) / self.bg_texture.get_y_size() self.texture = loader.loadTexture("textures/cosmonium-name-tp.png") self.texture_ratio = float( self.texture.get_x_size()) / self.texture.get_y_size() if self.ratio >= 1.0: sx = self.ratio sy = self.ratio / self.bg_texture_ratio else: sx = 1.0 / self.ratio sy = 1.0 / (self.ratio * self.bg_texture_ratio) self.bg_image = OnscreenImage(self.bg_texture, color=(1, 1, 1, 1), pos=(0, 0, 0), scale=(sx, 1, sy), parent=base.aspect2d) self.image = OnscreenImage( self.texture, color=(1, 1, 1, 1), scale=(self.image_scale * self.texture_ratio, 1, self.image_scale), parent=base.aspect2d) self.image.setTransparency(TransparencyAttrib.MAlpha) self.text = DirectLabel( text="", text_align=TextNode.ACenter, text_scale=self.text_scale, #text_font=self.font_normal, text_fg=(0.5, 0.5, 0.5, 1), text_bg=(0, 0, 0, 0), text_pos=(0, -self.image_scale - self.text_height)) #frameSize = (-0.75, 0.75, self.text_height, 0)) self.text.reparent_to(base.aspect2d) def set_text(self, text): self.text.setText(text) def close(self): self.text.destroy() self.image.destroy() self.bg_image.destroy()
class ScavengerHuntEffect: images = None def __init__(self, beanAmount): if not ScavengerHuntEffect.images: ScavengerHuntEffect.images = loader.loadModel('phase_4/models/props/tot_jar') self.npRoot = DirectFrame(parent=aspect2d, relief=None, scale=0.75, pos=(0, 0, 0.6)) if beanAmount > 0: self.npRoot.setColorScale(VBase4(1, 1, 1, 0)) self.jar = DirectFrame(parent=self.npRoot, relief=None, image=ScavengerHuntEffect.images.find('**/tot_jar')) self.jar.hide() self.eventImage = NodePath('EventImage') self.eventImage.reparentTo(self.npRoot) self.countLabel = DirectLabel(parent=self.jar, relief=None, text='+0', text_pos=(0.02, -0.2), text_scale=0.25, text_fg=(0.95, 0.0, 0, 1), text_font=ToontownGlobals.getSignFont()) def countUp(t, startVal, endVal): beanCountStr = startVal + t * (endVal - startVal) self.countLabel['text'] = '+' + `(int(beanCountStr))` def setCountColor(color): self.countLabel['text_fg'] = color self.track = Sequence(LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 1), startColorScale=VBase4(1, 1, 1, 0)), Wait(1), Func(self.jar.show), LerpColorScaleInterval(self.eventImage, 1, colorScale=VBase4(1, 1, 1, 0), startColorScale=VBase4(1, 1, 1, 1)), Parallel(LerpScaleInterval(self.npRoot, 1, scale=0.5, startScale=0.75), LerpPosInterval(self.npRoot, 1, pos=VBase3(-0.9, 0, -0.83))), LerpFunc(countUp, duration=2, extraArgs=[0, beanAmount]), Func(setCountColor, VBase4(0.95, 0.95, 0, 1)), Wait(3), Func(self.destroy)) else: self.npRoot.setColorScale(VBase4(1, 1, 1, 0)) self.attemptFailedMsg() self.track = Sequence(LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 1), startColorScale=VBase4(1, 1, 1, 0)), Wait(5), LerpColorScaleInterval(self.npRoot, 1, colorScale=VBase4(1, 1, 1, 0), startColorScale=VBase4(1, 1, 1, 1)), Func(self.destroy)) def play(self): if self.npRoot: self.track.start() def stop(self): if self.track != None and self.track.isPlaying(): self.track.finish() def destroy(self): self.stop() self.track = None if hasattr(self, 'eventImage') and self.eventImage: self.eventImage.detachNode() del self.eventImage if hasattr(self, 'countLabel') and self.countLabel: self.countLabel.destroy() del self.countLabel if hasattr(self, 'jar') and self.jar: self.jar.destroy() del self.jar if hasattr(self, 'npRoot') and self.npRoot: self.npRoot.destroy() del self.npRoot
class UserLabel(GameObject): def __init__(self, name, parent, menu_args, is_supporter, is_online, name_full): GameObject.__init__(self) self.menu_args = menu_args self.parent = parent self.name_full = name_full self.is_online = is_online lab_args = menu_args.label_args lab_args['scale'] = .046 self.lab = DirectLabel(text=name, pos=(0, 1, 0), parent=parent, text_align=TextNode.A_left, **lab_args) self.supp_btn = None self.set_supporter(is_supporter) self.set_online() def on_enter(self, pos): self.lab['text_fg'] = self.menu_args.text_active def on_exit(self, pos): self.lab['text_fg'] = self.menu_args.text_normal def set_supporter(self, is_supporter): if is_supporter: self.lab.set_x(.03) self.supp_btn = StaticMPBtn(self.parent, self, self.menu_args, 'assets/images/gui/medal.txo', .01, None, self.name_full, _('Supporter!')) else: self.lab.set_x(0) if self.supp_btn: self.supp_btn = self.supp_btn.destroy() def set_online(self, val=None): if val is not None: self.is_online = val if not self.eng.xmpp.client: self.is_online = False elif self.name_full == self.eng.xmpp.client.boundjid.full: self.is_online = True self.lab.set_alpha_scale(1 if self.is_online else .4) def destroy(self): self.lab.destroy() if self.supp_btn: self.supp_btn.destroy() GameObject.destroy(self)
class TextDisplay(DirectObject): DEFAULT_COLOR = (1, 0, 0, 1) def __init__(self, font, parent=aspect2d): DirectObject.__init__(self) self.text = DirectLabel(parent=parent, relief=None, text='', text_align=TextNode.A_center, text_pos=(0, -0.35), text_scale=0.15, text_wordwrap=15, text_fg=self.DEFAULT_COLOR, textMayChange=1, state=DGG.DISABLED, sortOrder=80) self.FONT = font def destroy(self): self.ignoreAll() taskMgr.remove('clearDisplayedText') if self.text: self.text.destroy() self.text = None def displayText(self, text, color=None, timeout=5): if not color: color = self.DEFAULT_COLOR self.text['text'] = text self.text.show() self.text['text_font'] = self.FONT self.text['text_scale'] = 0.15 self.text['text_pos'] = (0, -0.35) self.text['text_fg'] = color taskMgr.doMethodLater(timeout, self.clearText, 'clearDisplayedText') def clearText(self, task=None): self.text['text'] = '' self.text['text_fg'] = self.DEFAULT_COLOR self.text.hide() if task: return task.done
class PiratesDownloadWatcher(DownloadWatcher.DownloadWatcher): positions = [ (Point3(1, 0, 0.90000000000000002), Point3(1, 0, 0.90000000000000002)), (Point3(1, 0, 0.90000000000000002), Point3(1, 0, 0.90000000000000002)), (Point3(1, 0, 0.90000000000000002), Point3(1, 0, 0.90000000000000002))] def __init__(self, phaseNames): self.phaseNames = phaseNames self.model = loader.loadModel('models/gui/pir_m_gui_gen_loadingBar') bar = self.model.findTexture('pir_t_gui_gen_loadingBar') self.model.find('**/loading_bar').hide() self.topFrame = DirectFrame(parent = base.a2dTopRight, pos = (-0.80000000000000004, 0, -0.10000000000000001), sortOrder = NO_FADE_SORT_INDEX + 1) self.text = DirectLabel(relief = None, parent = self.topFrame, guiId = 'DownloadWatcherText', pos = (0, 0, 0), text = ' ', text_fg = (1, 1, 1, 1), text_shadow = (0, 0, 0, 1), text_scale = 0.040000000000000001, textMayChange = 1, text_align = TextNode.ARight, text_pos = (0.17000000000000001, 0), sortOrder = 2) self.bar = DirectWaitBar(relief = None, parent = self.topFrame, guiId = 'DownloadWatcherBar', pos = (0, 0, 0), frameSize = (-0.40000000000000002, 0.38, -0.044999999999999998, 0.065000000000000002), borderWidth = (0.02, 0.02), range = 100, frameColor = (1, 1, 1, 1), barColor = (0, 0.29999999999999999, 0, 1), barTexture = bar, geom = self.model, geom_scale = 0.089999999999999997, geom_pos = (-0.014, 0, 0.01), text = '0%', text_scale = 0.040000000000000001, text_fg = (1, 1, 1, 1), text_align = TextNode.ALeft, text_pos = (0.19, 0), sortOrder = 1) self.bgFrame = DirectFrame(relief = DGG.FLAT, parent = self.topFrame, pos = (0, 0, 0), frameColor = (0.5, 0.27000000000000002, 0.35999999999999999, 0.20000000000000001), frameSize = (-0.44, 0.39000000000000001, -0.035999999999999997, 0.056000000000000001), borderWidth = (0.02, 0.02), scale = 0.90000000000000002, sortOrder = 0) self.accept('launcherPercentPhaseComplete', self.update) def update(self, phase, percent, reqByteRate, actualByteRate): phaseName = self.phaseNames[phase] self.text['text'] = OTPLocalizer.DownloadWatcherUpdate % phaseName + ' -' self.bar['text'] = '%s %%' % percent self.bar['value'] = percent def foreground(self): self.topFrame.reparentTo(base.a2dpTopRight) self.topFrame.setBin('gui-fixed', 55) self.topFrame['sortOrder'] = NO_FADE_SORT_INDEX + 1 def background(self): self.topFrame.reparentTo(base.a2dTopRight) self.topFrame.setBin('unsorted', 49) self.topFrame['sortOrder'] = -1 def cleanup(self): self.text.destroy() self.bar.destroy() self.bgFrame.destroy() self.topFrame.destroy() self.ignoreAll()
class GUI: def __init__(self, rootParent=None): self.background = loader.load_model("assets/models/highscoreBack.bam") self.background.reparent_to(render) x = -0.8 y = 0.8 xShift = 0.15 yShift = -0.15 lb = base.leaderboard.leaderboard() self.lbl1 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(0.03750000149011612, 3.3125, -0.11250001192092896, 0.699999988079071), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(x, 0, y), scale=LVecBase3f(0.1, 0.1, 0.1), text='1 - {} : {}'.format(lb[0][0], lb[0][1]), text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lbl1.setTransparency(0) x += xShift y += yShift self.lbl2 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(0.03750000149011612, 3.3125, -0.11250001192092896, 0.699999988079071), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(x, 0, y), scale=LVecBase3f(0.1, 0.1, 0.1), text='2 - {} : {}'.format(lb[1][0], lb[1][1]), text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lbl2.setTransparency(0) x += xShift y += yShift self.lbl3 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(0.03750000149011612, 3.3125, -0.11250001192092896, 0.699999988079071), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(x, 0, y), scale=LVecBase3f(0.1, 0.1, 0.1), text='3 - {} : {}'.format(lb[2][0], lb[2][1]), text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lbl3.setTransparency(0) x += xShift y += yShift self.lbl4 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(0.03750000149011612, 3.3125, -0.11250001192092896, 0.699999988079071), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(x, 0, y), scale=LVecBase3f(0.1, 0.1, 0.1), text='4 - {} : {}'.format(lb[3][0], lb[3][1]), text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lbl4.setTransparency(0) x += xShift y += yShift self.lbl5 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(0.03750000149011612, 3.3125, -0.11250001192092896, 0.699999988079071), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(x, 0, y), scale=LVecBase3f(0.1, 0.1, 0.1), text='5 - {} : {}'.format(lb[4][0], lb[4][1]), text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lbl5.setTransparency(0) x += xShift y += yShift self.lbl6 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(0.03750000149011612, 3.3125, -0.11250001192092896, 0.699999988079071), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(x, 0, y), scale=LVecBase3f(0.1, 0.1, 0.1), text='6 - {} : {}'.format(lb[5][0], lb[5][1]), text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lbl6.setTransparency(0) x += xShift y += yShift self.lbl7 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(0.03750000149011612, 3.3125, -0.11250001192092896, 0.699999988079071), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(x, 0, y), scale=LVecBase3f(0.1, 0.1, 0.1), text='7 - {} : {}'.format(lb[6][0], lb[6][1]), text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lbl7.setTransparency(0) x += xShift y += yShift self.lbl8 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(0.03750000149011612, 3.3125, -0.11250001192092896, 0.699999988079071), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(x, 0, y), scale=LVecBase3f(0.1, 0.1, 0.1), text='8 - {} : {}'.format(lb[7][0], lb[7][1]), text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lbl8.setTransparency(0) x += xShift y += yShift self.lbl9 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(0.03750000149011612, 3.3125, -0.11250001192092896, 0.699999988079071), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(x, 0, y), scale=LVecBase3f(0.1, 0.1, 0.1), text='9 - {} : {}'.format(lb[8][0], lb[8][1]), text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lbl9.setTransparency(0) x += xShift y += yShift self.lbl10 = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), frameSize=(0.03750000149011612, 3.3125, -0.11250001192092896, 0.699999988079071), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(x, 0, y), scale=LVecBase3f(0.1, 0.1, 0.1), text='10 - {} : {}'.format(lb[9][0], lb[9][1]), text_align=TextNode.A_left, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lbl10.setTransparency(0) credits = ''' hendrik-jan - Lead design & Audio tizilogic - Procedural Generation fireclaw - Graphics rdb - Fireworks ''' self.credits = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), scale=LVecBase3f(0.1, 0.1, 0.1), text=credits, text_align=0, #TextNode.A_left, text_scale=(0.5, 0.5), text_pos=(-4, 4), text_fg=LVecBase4f(1, 1, 1, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.credits.reparent_to(base.a2dBottomLeft) self.wait = 0.3 self.task = base.task_mgr.add(self.update) def update(self, task): if self.wait < 0: context = base.device_listener.read_context('player') if context['move'] or context['accelerate'] or context[ "decelerate"]: base.messenger.send("do_back") else: self.wait -= globalClock.get_dt() return task.cont def show(self): self.lbl1.show() self.lbl2.show() self.lbl3.show() self.lbl4.show() self.lbl5.show() self.lbl6.show() self.lbl7.show() self.lbl8.show() self.lbl9.show() self.lbl10.show() def hide(self): self.lbl1.hide() self.lbl2.hide() self.lbl3.hide() self.lbl4.hide() self.lbl5.hide() self.lbl6.hide() self.lbl7.hide() self.lbl8.hide() self.lbl9.hide() self.lbl10.hide() def destroy(self): self.task.remove() self.credits.destroy() self.background.detach_node() self.lbl1.destroy() self.lbl2.destroy() self.lbl3.destroy() self.lbl4.destroy() self.lbl5.destroy() self.lbl6.destroy() self.lbl7.destroy() self.lbl8.destroy() self.lbl9.destroy() self.lbl10.destroy()
class HUD(): def __init__(self): self.canPlantLabel = DirectLabel( frameColor=(0, 0, 0, 0.25), text_fg=(1, 1, 1, 1), scale=0.15, pos=(0, 0, 0.25), pad=(0.2,0.2), text=_("Plant Seed")) self.canPlantLabel.setTransparency(True) self.canPlantLabel.reparentTo(base.a2dBottomCenter) self.canPlantLabel.hide() self.speekLabel = DirectLabel( frameColor=(0, 0, 0, 0.25), text_fg=(1, 1, 1, 1), scale=0.15, pos=(0, 0, 0.5), pad=(0.2,0.2), text="...") self.speekLabel.reparentTo(render) self.speekLabel.hide() self.speekLabel.setTransparency(True) self.speekLabel.setEffect(BillboardEffect.makePointEye()) self.speekLabel.setBin("fixed", 11) self.speekLabel.setDepthWrite(False) self.storyText = DirectLabel( frameColor=(0, 0, 0, 0.25), text_fg=(1, 1, 1, 1), scale=0.08, pos=(0, 0, 0.25), pad=(0.2,0.2), text="Story text") self.storyText.setTransparency(True) self.storyText.reparentTo(base.a2dBottomCenter) self.storyText.hide() self.points = DirectLabel( frameColor=(0, 0, 0, 0.25), text_fg=(1, 1, 1, 1), scale=0.075, pos=(0.05, 0, -0.1), pad=(0.2,0.2), text_align=TextNode.ALeft, text=_("Points: %d")%0) self.points.setTransparency(True) self.points.reparentTo(base.a2dTopLeft) self.playerWater = DirectLabel( frameColor=(0, 0, 0, 0.25), text_fg=(1, 1, 1, 1), scale=0.075, pos=(0.05, 0, -0.2), pad=(0.2,0.2), text_align=TextNode.ALeft, text=_("Remaining Water: %d")%100) self.playerWater.setTransparency(True) self.playerWater.reparentTo(base.a2dTopLeft) self.helpInfo = DirectLabel( frameColor=(0, 0, 0, 0.25), text_fg=(1, 1, 1, 1), scale=0.075, pos=(-0.05, 0, -0.1), pad=(0.2,0.2), text_align=TextNode.ARight, text=_("F1 - show help")) self.helpInfo.setTransparency(True) self.helpInfo.reparentTo(base.a2dTopRight) self.hide() def show(self): self.points.show() self.playerWater.show() self.helpInfo.show() def hide(self): self.points.hide() self.playerWater.hide() self.helpInfo.hide() def hideAll(self): self.canPlantLabel.hide() self.speekLabel.hide() self.points.hide() self.playerWater.hide() self.helpInfo.hide() def showStory(self): self.storyText.show() def hideStory(self): self.storyText.hide() def cleanup(self): self.hideAll() self.canPlantLabel.destroy() self.speekLabel.destroy() self.points.destroy() self.playerWater.destroy() self.helpInfo.destroy() def showCanPlant(self): self.canPlantLabel.show() def hideCanPlant(self): self.canPlantLabel.hide() def setPoints(self, points): self.points["text"] = _("Points: %d")%points self.points.resetFrameSize() def setWater(self, water): self.playerWater["text"] = _("Remaining Water: %d")%water self.playerWater.resetFrameSize() def setStory(self, storytext): self.storyText["text"] = storytext self.storyText.resetFrameSize() def showSpeekText(self, text, newPos): self.speekLabel.setPos(newPos) self.speekLabel["text"] = text self.speekLabel.resetFrameSize() self.speekLabel.show() def hideSpeekText(self): self.speekLabel.hide()
class GUI: def __init__(self, rootParent=None): self.frmInventory = DirectFrame( frameColor=(0.2, 0.2, 0.2, 1.0), frameSize=(-0.3, 0.3, -0.5, 0.5), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.725, 0, 0.2), parent=rootParent, ) self.frmInventory.setTransparency(0) self.frmContent = DirectScrolledFrame( canvasSize=(-0.8, 0.8, -0.8, 0.8), frameColor=(0.2, 0.2, 0.2, 1.0), frameSize=(-0.8, 0.8, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.475, 0, 0.1), scrollBarWidth=0.08, state='normal', horizontalScroll_borderWidth=(0.01, 0.01), horizontalScroll_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_hpr=LVecBase3f(0, 0, 0), horizontalScroll_pos=LPoint3f(0, 0, 0), horizontalScroll_decButton_borderWidth=(0.01, 0.01), horizontalScroll_decButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_decButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_decButton_pos=LPoint3f(0, 0, 0), horizontalScroll_incButton_borderWidth=(0.01, 0.01), horizontalScroll_incButton_frameSize=(-0.05, 0.05, -0.04, 0.04), horizontalScroll_incButton_hpr=LVecBase3f(0, 0, 0), horizontalScroll_incButton_pos=LPoint3f(0, 0, 0), horizontalScroll_thumb_borderWidth=(0.01, 0.01), horizontalScroll_thumb_hpr=LVecBase3f(0, 0, 0), horizontalScroll_thumb_pos=LPoint3f(0, 0, 0), verticalScroll_borderWidth=(0.01, 0.01), verticalScroll_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_hpr=LVecBase3f(0, 0, 0), verticalScroll_pos=LPoint3f(0, 0, 0), verticalScroll_decButton_borderWidth=(0.01, 0.01), verticalScroll_decButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_decButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_decButton_pos=LPoint3f(0, 0, 0), verticalScroll_incButton_borderWidth=(0.01, 0.01), verticalScroll_incButton_frameSize=(-0.04, 0.04, -0.05, 0.05), verticalScroll_incButton_hpr=LVecBase3f(0, 0, 0), verticalScroll_incButton_pos=LPoint3f(0, 0, 0), verticalScroll_thumb_borderWidth=(0.01, 0.01), verticalScroll_thumb_hpr=LVecBase3f(0, 0, 0), verticalScroll_thumb_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmContent.setTransparency(1) self.btnQuit = DirectButton( frameSize=(-3.0, 3.0, -0.3, 0.9), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.725, 0, -0.85), scale=LVecBase3f(0.1, 0.1, 0.1), text='Quit', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["quitGame"], pressEffect=1, ) self.btnQuit.setTransparency(0) self.btnAudioToggle = DirectButton( frameSize=(-3.0, 3.0, -0.3, 0.9), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.725, 0, -0.7), scale=LVecBase3f(0.1, 0.1, 0.1), text='Audio On', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["toggleAudio"], pressEffect=1, ) self.btnAudioToggle.setTransparency(0) self.frmBorderOverlay = DirectFrame( frameColor=(1.0, 1.0, 1.0, 0.0), frameSize=(-0.8, 0.8, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), image='gameScreen/border.png', pos=LPoint3f(-0.475, 0, 0.1), image_scale=LVecBase3f(0.8, 1, 0.8), image_pos=LPoint3f(0, 0, 0), parent=rootParent, ) self.frmBorderOverlay.setTransparency(1) self.lblInventory = DirectLabel( frameColor=(0.8, 0.8, 0.8, 0.0), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.725, 0, 0.775), scale=LVecBase3f(0.1, 0.1, 0.1), text='Inventory', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0.9, 0.9, 0.9, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.lblInventory.setTransparency(0) self.lblStory = DirectLabel( frameSize=(-0.125, 12.0, -0.313, 0.925), hpr=LVecBase3f(0, 0, 0), pad=(0.2, 0.2), pos=LPoint3f(-1.26, 0, -0.845), scale=LVecBase3f(0.1, 0.1, 0.1), text='', text_align=TextNode.A_left, text_scale=(0.4, 0.4), text_pos=(0.0, 0.4), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=29.8, parent=rootParent, ) self.lblStory.setTransparency(0) self.btnContinue = DirectButton( frameSize=(-1.8, 1.8, -0.3, 0.9), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0.145, 0, -0.845), scale=LVecBase3f(0.1, 0.1, 0.1), text='Cont.', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, command=base.messenger.send, extraArgs=["story_continue"], pressEffect=1, ) self.btnContinue.setTransparency(0) self.frmFadeOverlay = DirectFrame( frameColor=(0.0, 0.0, 0.0, 1.0), frameSize=(-0.8, 0.8, -0.8, 0.8), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(-0.475, 0, 0.1), parent=rootParent, ) self.frmFadeOverlay.setTransparency(1) def show(self): self.frmInventory.show() self.frmContent.show() self.btnQuit.show() self.btnAudioToggle.show() self.frmBorderOverlay.show() self.lblInventory.show() self.lblStory.show() self.btnContinue.show() self.frmFadeOverlay.show() def hide(self): self.frmInventory.hide() self.frmContent.hide() self.btnQuit.hide() self.btnAudioToggle.hide() self.frmBorderOverlay.hide() self.lblInventory.hide() self.lblStory.hide() self.btnContinue.hide() self.frmFadeOverlay.hide() def destroy(self): self.frmInventory.destroy() self.frmContent.destroy() self.btnQuit.destroy() self.btnAudioToggle.destroy() self.frmBorderOverlay.destroy() self.lblInventory.destroy() self.lblStory.destroy() self.btnContinue.destroy() self.frmFadeOverlay.destroy()
class GUI: def __init__(self, USERNAME, rootParent=None): self.pg149 = DirectLabel( frameSize=(-1.149999976158142, 1.25, -0.11250001192092896, 0.7250000238418579), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.525), scale=LVecBase3f(0.1, 0.1, 0.1), text='Top', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.pg149.setTransparency(0) self.pg1336 = DirectScrolledList( forceHeight=0.1, frameSize=(-0.5, 0.5, -0.01, 0.75), hpr=LVecBase3f(0, 0, 0), numItemsVisible=5, pos=LPoint3f(0.025, 0, -0.25), state='normal', text='scrolled list', decButton_borderWidth=(0.005, 0.005), decButton_hpr=LVecBase3f(0, 0, 0), decButton_pos=LPoint3f(-0.45, 0, 0.03), decButton_state='disabled', decButton_text='Prev', decButton_text_align=TextNode.A_left, decButton_text_scale=(0.05, 0.05), decButton_text_pos=(0, 0), decButton_text_fg=LVecBase4f(0, 0, 0, 1), decButton_text_bg=LVecBase4f(0, 0, 0, 0), decButton_text_wordwrap=None, incButton_borderWidth=(0.005, 0.005), incButton_hpr=LVecBase3f(0, 0, 0), incButton_pos=LPoint3f(0.45, 0, 0.03), incButton_state='disabled', incButton_text='Next', incButton_text_align=TextNode.A_right, incButton_text_scale=(0.05, 0.05), incButton_text_pos=(0, 0), incButton_text_fg=LVecBase4f(0, 0, 0, 1), incButton_text_bg=LVecBase4f(0, 0, 0, 0), incButton_text_wordwrap=None, itemFrame_frameColor=(1, 1, 1, 1), itemFrame_frameSize=(-0.47, 0.47, -0.5, 0.1), itemFrame_hpr=LVecBase3f(0, 0, 0), itemFrame_pos=LPoint3f(0, 0, 0.6), text_align=TextNode.A_center, text_scale=(0.1, 0.1), text_pos=(0, 0.015), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.pg1336.setTransparency(0) self.pg1693 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), scale=LVecBase3f(0.1, 0.1, 0.1), state='disabled', text='Admin', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.pg1336, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg1693.setTransparency(0) self.pg1715 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.1), scale=LVecBase3f(0.1, 0.1, 0.1), text='NFSMW', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.pg1336, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg1715.setTransparency(0) self.pg1740 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.2), scale=LVecBase3f(0.1, 0.1, 0.1), text='|X_X|', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.pg1336, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg1740.setTransparency(0) self.pg1768 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.3), scale=LVecBase3f(0.1, 0.1, 0.1), text=USERNAME, text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.pg1336, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg1768.setTransparency(0) self.pg1799 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, -0.4), scale=LVecBase3f(0.1, 0.1, 0.1), text='.___.', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.pg1336, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg1799.setTransparency(0) self.pg1336.addItem(self.pg1693) self.pg1336.addItem(self.pg1715) self.pg1336.addItem(self.pg1740) self.pg1336.addItem(self.pg1768) self.pg1336.addItem(self.pg1799) def show(self): self.pg149.show() self.pg1336.show() def hide(self): self.pg149.hide() self.pg1336.hide() def destroy(self): self.pg149.destroy() self.pg1336.destroy()
class MapPage(BookPage, DirectFrame): def __init__(self, book): BookPage.__init__(self, book, 'Map', wantHeader=False) DirectFrame.__init__(self, parent=book, relief=None, pos=(0, 0, 0.0775), image_scale=(1.8, 1, 1.35), scale=0.97) self['image'] = loader.loadModel( 'phase_3.5/models/gui/toontown_map.bam') self.initialiseoptions(MapPage) self.hide() self.cloudPos = [[(-0.61, 0, 0.18), (0.55, 0.25, 0.37), (180, 0, 0)], [(-0.54, 0, 0.34), (0.76, 0.4, 0.55), (180, 0, 0)], [(-0.55, 0, -0.09), (0.72, 0.4, 0.55), (0, 0, 0)], [(-0.67, 0, -0.51), (0.5, 0.29, 0.38), (180, 0, 0)], [(-0.67, 0, 0.51), (0.50, 0.29, 0.38), (0, 0, 0)], [(0.67, 0, 0.51), (0.5, 0.29, 0.38), (0, 0, 0)], [(0.35, 0, -0.46), (0.63, 0.35, 0.45), (0, 0, 0)], [(0.18, 0, -0.45), (0.52, 0.27, 0.32), (0, 0, 0)], [(0.67, 0, -0.44), (0.63, 0.35, 0.48), (180, 0, 0)]] self.hoodClouds = [ #[(0.02, 0, -0.17), (0.63, 0.35, 0.48), (180, 0, 0), ZoneUtil.ToontownCentral], [(0.63, 0, -0.13), (0.63, 0.35, 0.40), (0, 0, 0), ZoneUtil.DonaldsDock], [(0.51, 0, 0.25), (0.57, 0.35, 0.40), (0, 0, 0), ZoneUtil.TheBrrrgh], [(0.03, 0, 0.19), (0.63, 0.35, 0.40), (180, 0, 0), ZoneUtil.MinniesMelodyland], [(-0.08, 0, 0.46), (0.54, 0.35, 0.40), (0, 0, 0), ZoneUtil.DonaldsDreamland], [(-0.28, 0, -0.49), (0.60, 0.35, 0.45), (0, 0, 0), ZoneUtil.DaisyGardens] ] self.labelData = [[(0, 0, -0.2), ZoneUtil.ToontownCentral], [(0.65, 0, -0.125), ZoneUtil.DonaldsDock], [(0.07, 0, 0.18), ZoneUtil.MinniesMelodyland], [(-0.1, 0, 0.45), ZoneUtil.DonaldsDreamland], [(0.5, 0, 0.25), ZoneUtil.TheBrrrgh], [(-0.37, 0, -0.525), ZoneUtil.DaisyGardens]] # The buttons self.infoLabel = None self.BTPButton = None self.clouds = [] self.labels = [] def enter(self): BookPage.enter(self) self.show() def exit(self): BookPage.exit(self) self.hide() def load(self): BookPage.load(self) # Let's load up the clouds. for pos, scale, hpr in self.cloudPos: cloud = loader.loadModel('phase_3.5/models/gui/cloud.bam') cloud.reparentTo(self) cloud.setPos(pos) cloud.setScale(scale) cloud.setHpr(hpr) self.clouds.append(cloud) for pos, scale, hpr, hood in self.hoodClouds: if not base.localAvatar.hasDiscoveredHood( ZoneUtil.getZoneId(hood)): cloud = loader.loadModel('phase_3.5/models/gui/cloud.bam') cloud.reparentTo(self) cloud.setPos(pos) cloud.setScale(scale) cloud.setHpr(hpr) self.clouds.append(cloud) for pos, name in self.labelData: if base.localAvatar.hasDiscoveredHood(ZoneUtil.getZoneId(name)): text = name if base.localAvatar.hasTeleportAccess( ZoneUtil.getZoneId(name)): text = 'Go To\n' + text label = DirectButton( parent=self, relief=None, pos=pos, pad=(0.2, 0.16), text=('', text, text, ''), text_bg=Vec4(1, 1, 1, 0.4), text_scale=0.055, text_wordwrap=8, rolloverSound=CIGlobals.getRolloverSound(), clickSound=None, pressEffect=0, sortOrder=1, text_font=CIGlobals.getToonFont()) if base.localAvatar.hasTeleportAccess( ZoneUtil.getZoneId(name)): label['command'] = self.book.finished label['extraArgs'] = [ZoneUtil.getZoneId(name)] label.resetFrameSize() self.labels.append(label) currHoodName = base.cr.playGame.hood.id currLocation = '' if base.localAvatar.zoneId == ZoneUtil.MinigameAreaId or base.localAvatar.getBattleZone( ) is not None: currLocation = '' elif ZoneUtil.getWhereName(base.localAvatar.zoneId) == 'playground': currLocation = 'Playground' elif ZoneUtil.getWhereName( base.localAvatar.zoneId) in ['street', 'interior']: currLocation = ZoneUtil.BranchZone2StreetName[ ZoneUtil.getBranchZone(base.localAvatar.zoneId)] self.infoLabel = DirectLabel(relief=None, text='You are in: {0}\n{1}'.format( currHoodName, currLocation), scale=0.06, pos=(-0.4, 0, -0.74), parent=self, text_align=TextNode.ACenter) if currHoodName in [ZoneUtil.MinigameArea, ZoneUtil.BattleTTC]: currHoodName = base.cr.playGame.lastHood btpText = 'Back to Playground' btpEA = [ZoneUtil.getZoneId(currHoodName)] self.BTPButton = DirectButton(relief=None, text=btpText, geom=CIGlobals.getDefaultBtnGeom(), text_pos=(0, -0.018), geom_scale=(1.3, 1.11, 1.11), text_scale=0.06, parent=self, text_font=CIGlobals.getToonFont(), pos=(0.25, 0, -0.75), command=self.book.finished, extraArgs=btpEA, scale=0.7) icons = loader.loadModel('phase_3.5/models/gui/sos_textures.bam') self.icon = icons.find('**/teleportIcon') icons.detachNode() def unload(self): BookPage.unload(self) # Destroy the GUI elements. self.infoLabel.destroy() self.BTPButton.destroy() self.destroy() # Destroy the labels. for label in self.labels: label.destroy() # Destroy the clouds. for cloud in self.clouds: cloud.removeNode() self.clouds.remove(cloud) del self.labels del self.clouds del self.infoLabel del self.BTPButton
class CustomizeScreen(DirectFrame): notify = directNotify.newCategory('CustomizeScreen') def __init__(self, callback, **kw): self._callback = callback geom = loader.loadModel('phase_6/models/gui/ui_frame') optiondefs = (('relief', None, None), ('geom', geom, None), ('geom_scale', 1.5, 1.5), ('text', base.localAvatar.getName(), None), ('text_align', TextNode.ACenter, None), ('text_font', FONT, None), ('text_scale', 0.075, None), ('text_pos', (0, 0.65), None), ('pos', (-0.7, 0, 0.16), None)) self.defineoptions(kw, optiondefs) DirectFrame.__init__(self, aspect2d) self.initialiseoptions(CustomizeScreen) self.genderOptions = None self.genderLabel = None self.speciesOptions = None self.speciesLabel = None self.legOptions = None self.legLabel = None self.torsoOptions = None self.torsoLabel = None self.headOptions = None self.headLabel = None self.muzzleOptions = None self.muzzleLabel = None self.gloveOptions = None self.gloveLabel = None self.headColorOptions = None self.headColorLabel = None self.armColorOptions = None self.armColorLabel = None self.legColorOptions = None self.legColorLabel = None self.shirtColorOptions = None self.shirtColorLabel = None self.bottomsColorOptions = None self.bottomsColorLabel = None self.shirtLabel = None self.shirtEntry = None self.shortsLabel = None self.shortsEntry = None self.doneButton = None geom.removeNode() rotateGeoms = loader.loadModel('phase_6/models/gui/ui_arrow_buttons') leftGeom = (rotateGeoms.find('**/*ArrowLeft*Up'), rotateGeoms.find('**/*ArrowLeft*Down'), rotateGeoms.find('**/*ArrowLeft*Rollover')) rightGeom = (rotateGeoms.find('**/*ArrowRight*Up'), rotateGeoms.find('**/*ArrowRight*Down'), rotateGeoms.find('**/*ArrowRight*Rollover')) self.leftButton = DirectButton(parent=self, relief=None, image=leftGeom, pos=(-0.11, 0, -0.07)) self.rightButton = DirectButton(parent=self, relief=None, image=rightGeom, pos=(0.11, 0, -0.07)) self.leftButton.bind(DGG.B1PRESS, self.__rotateToon, [-3]) self.leftButton.bind(DGG.B1RELEASE, self.__stopRotation) self.rightButton.bind(DGG.B1PRESS, self.__rotateToon, [3]) self.rightButton.bind(DGG.B1RELEASE, self.__stopRotation) rotateGeoms.removeNode() self.toon = None self.dna = None self.pitch = self.attachNewNode('pitch') self.rotate = self.pitch.attachNewNode('rotate') self.scale = self.rotate.attachNewNode('scale') self.pitch.setP(0) self.makeToon() def makeToon(self, dna=None): if self.toon: self.toon.cleanup() self.toon.delete() self.toon.removeNode() self.toon = None self.dna = None if not dna: dna = base.localAvatar.getDNAString() self.toon = Toon.Toon() self.dna = ToonDNA.ToonDNA() self.dna.makeFromNetString(dna) self.toon.setDNA(self.dna) self.toon.getGeomNode().setDepthWrite(1) self.toon.getGeomNode().setDepthTest(1) self.toon.setHpr(180, 0, 0) self.toon.setZ(-0.45) scaleFactor = 0.2 if self.dna.legs == 'l': scaleFactor = 0.19 self.toon.setScale(scaleFactor) self.toon.reparentTo(self.scale) def __rotateToon(self, *args): taskMgr.add(self.__rotateTask, 'toonRotateTask', extraArgs=[args[0]], appendTask=True) def __rotateTask(self, direction, task): if hasattr(self, 'pitch'): self.pitch.setH((self.pitch.getH() % 360) + 0.4 * direction) return task.cont else: return task.done def __stopRotation(self, *args): taskMgr.remove('toonRotateTask') def __selectHead(self, *args): species = name2code.get(args[0].lower()) newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(head=species + self.dna.head[1:]) self.makeToon(newDNA.makeNetString()) def __selectLegs(self, *args): legs = args[0].lower() if legs == 'long': legs = 'l' elif legs == 'medium': legs = 'm' else: legs = 's' newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(legs=legs) self.makeToon(newDNA.makeNetString()) def __selectGloves(self, *args): color = args[0] if color == 'White': index = len(ToonDNA.NumToColor) + 1 else: index = ToonDNA.NumToColor.index(color) newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(gloveColor=index) self.makeToon(newDNA.makeNetString()) def __selectTorso(self, *args): torso = args[0][0].lower() if self.dna.gender == 'f': torso += 'd' else: torso += 's' newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(torso=torso) self.makeToon(newDNA.makeNetString()) def __selectHeadSize(self, *args): size = args[0][0].lower() head = self.dna.head newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(head=head[0] + size + head[2]) self.makeToon(newDNA.makeNetString()) def __selectMuzzleSize(self, *args): size = args[0][0].lower() head = self.dna.head newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(head=head[0] + head[1] + size) if newDNA.head in ToonDNA.toonHeadTypes: self.makeToon(newDNA.makeNetString()) def __selectGender(self, *args): gender = args[0].lower() if gender == 'boy': gender = 'm' else: gender = 'f' newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) #newDNA.updateToonProperties(gender=gender) newDNA.updateToonProperties(gender=gender, bottomTexture=0) self.makeToon(newDNA.makeNetString()) def __choseHeadColor(self, *args): color = args[0] if color == 'White': index = len(ToonDNA.NumToColor) + 1 else: index = ToonDNA.NumToColor.index(color) newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(headColor=index) self.makeToon(newDNA.makeNetString()) def __choseArmColor(self, *args): color = args[0] if color == 'White': index = len(ToonDNA.NumToColor) + 1 else: index = ToonDNA.NumToColor.index(color) newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(armColor=index) self.makeToon(newDNA.makeNetString()) def __choseLegColor(self, *args): color = args[0] if color == 'White': index = len(ToonDNA.NumToColor) + 1 else: index = ToonDNA.NumToColor.index(color) newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(legColor=index) self.makeToon(newDNA.makeNetString()) def __choseShirtColor(self, *args): color = args[0] index = ToonDNA.ClothesColorNames.index(color) newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(topTextureColor=index, sleeveTextureColor=index) self.makeToon(newDNA.makeNetString()) def __choseShortsColor(self, *args): color = args[0] index = ToonDNA.ClothesColorNames.index(color) newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(bottomTextureColor=index) self.makeToon(newDNA.makeNetString()) def __changeShirt(self, *args): index = int(args[0]) if index not in range(0, len(ToonDNA.Shirts)): return newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(topTexture=index) self.makeToon(newDNA.makeNetString()) def __changeShorts(self, *args): index = int(args[0]) bottoms = ToonDNA.BoyShorts if self.dna.gender == 'm' else ToonDNA.GirlBottoms if index not in range(0, len(bottoms)): return newDNA = ToonDNA.ToonDNA() newDNA.makeFromNetString(self.dna.makeNetString()) newDNA.updateToonProperties(bottomTexture=index) self.makeToon(newDNA.makeNetString()) def load(self): genders = ['Boy', 'Girl'] gMap = {'m': genders[0], 'f': genders[1]} gIndex = gMap.get(self.dna.gender) self.genderOptions = CustomizeOption(parent=self, command=self.__selectGender, initialitem=gIndex, items=genders, pos=(1.15, 0, 0.7)) self.genderLabel = DirectLabel(parent=self.genderOptions, relief=None, text_font=FONT, text='Gender:', text_scale=0.85, pos=(-2.59, 0, 0)) species = [ 'Bear', 'Cat', 'Dog', 'Duck', 'Horse', 'Monkey', 'Mouse', 'Pig', 'Rabbit' ] sIndex = species.index(code2name.get(self.dna.head[0]).capitalize()) self.speciesOptions = CustomizeOption(parent=self, command=self.__selectHead, initialitem=sIndex, items=species, pos=(1.15, 0, 0.55)) self.speciesLabel = DirectLabel(parent=self.speciesOptions, relief=None, text_font=FONT, text='Species:', text_scale=0.85, pos=(-2.7, 0, 0)) headOptions = ['Short', 'Long'] types = {'s': headOptions[0], 'l': headOptions[1]} hIndex = headOptions.index(types.get(self.dna.head[1])) self.headOptions = CustomizeOption(parent=self, command=self.__selectHeadSize, initialitem=hIndex, items=headOptions, pos=(1.15, 0, 0.4)) self.headLabel = DirectLabel(parent=self.headOptions, relief=None, text_font=FONT, text='Head Size:', text_scale=0.85, pos=(-3.07, 0, 0)) mIndex = headOptions.index(types.get(self.dna.head[2])) self.muzzleOptions = CustomizeOption(parent=self, command=self.__selectMuzzleSize, initialitem=mIndex, items=headOptions, pos=(1.15, 0, 0.25)) self.muzzleLabel = DirectLabel(parent=self.muzzleOptions, relief=None, text_font=FONT, text='Muzzle Size:', text_scale=0.85, pos=(-3.4, 0, 0)) legs = ['Small', 'Medium', 'Long'] legType = {'s': 'Small', 'm': 'Medium', 'l': 'Long'} lIndex = legs.index(legType.get(self.dna.legs)) self.legOptions = CustomizeOption(parent=self, command=self.__selectLegs, initialitem=lIndex, items=legs, pos=(1.15, 0, 0.1)) self.legLabel = DirectLabel(parent=self.legOptions, relief=None, text_font=FONT, text='Leg Length:', text_scale=0.85, pos=(-3.21, 0, 0)) tIndex = legs.index(legType.get(self.dna.torso[0])) self.torsoOptions = CustomizeOption(parent=self, command=self.__selectTorso, initialitem=tIndex, items=legs, pos=(1.15, 0, -0.05)) self.torsoLabel = DirectLabel(parent=self.torsoOptions, relief=None, text_font=FONT, text='Torso Length:', text_scale=0.85, pos=(-3.57, 0, 0)) gloveColor = self.dna.gloveColor length = len(ToonDNA.NumToColor) if gloveColor > length: gloveColor = 0 headColor = self.dna.headColor if headColor > length: headColor = 0 armColor = self.dna.armColor if armColor > length: armColor = 0 legColor = self.dna.legColor if legColor > length: legColor = 0 self.gloveOptions = CustomizeOption(parent=self, command=self.__selectGloves, initialitem=gloveColor, items=ToonDNA.NumToColor, pos=(1.15, 0, -0.2), image_pos=(1.55, 0, 0.15), text_pos=(-0.13, -.1)) self.gloveLabel = DirectLabel(parent=self.gloveOptions, relief=None, text_font=FONT, text='Glove Color:', text_scale=0.85, pos=(-3.35, 0, 0)) self.headColorOptions = CustomizeOption(parent=self, command=self.__choseHeadColor, initialitem=headColor, items=ToonDNA.NumToColor, pos=(1.15, 0, -0.35), image_pos=(1.55, 0, 0.15), text_pos=(-0.13, -.1)) self.headColorLabel = DirectLabel(parent=self.headColorOptions, relief=None, text_font=FONT, text='Head Color:', text_scale=0.85, pos=(-3.27, 0, 0)) self.armColorOptions = CustomizeOption(parent=self, command=self.__choseArmColor, initialitem=armColor, items=ToonDNA.NumToColor, pos=(1.15, 0, -0.5), image_pos=(1.55, 0, 0.15), text_pos=(-0.13, -.1)) self.armColorLabel = DirectLabel(parent=self.armColorOptions, relief=None, text_font=FONT, text='Arm Color:', text_scale=0.85, pos=(-3.074, 0, 0)) self.legColorOptions = CustomizeOption(parent=self, command=self.__choseLegColor, initialitem=legColor, items=ToonDNA.NumToColor, pos=(1.15, 0, -0.65), image_pos=(1.55, 0, 0.15), text_pos=(-0.13, -.1)) self.legColorLabel = DirectLabel(parent=self.legColorOptions, relief=None, text_font=FONT, text='Leg Color:', text_scale=0.85, pos=(-3, 0, 0)) self.shirtColorOptions = CustomizeOption( parent=self, command=self.__choseShirtColor, initialitem=self.dna.topTexColor - 1, items=ToonDNA.ClothesColorNames[1:], pos=(1.15, 0, -0.8), image_pos=(1.55, 0, 0.15), text_pos=(-0.13, -.1)) self.shirtColorLabel = DirectLabel(parent=self.shirtColorOptions, relief=None, text_font=FONT, text='Shirt Color:', text_scale=0.85, pos=(-3, 0, 0)) self.bottomsColorOptions = CustomizeOption( parent=self, command=self.__choseShortsColor, initialitem=self.dna.botTexColor - 1, items=ToonDNA.ClothesColorNames[1:], pos=(1.15, 0, -0.95), image_pos=(1.55, 0, 0.15), text_pos=(-0.13, -.1)) self.bottomsColorLabel = DirectLabel(parent=self.bottomsColorOptions, relief=None, text_font=FONT, text='Shorts Color:', text_scale=0.85, pos=(-3, 0, 0)) self.shirtEntry = DirectEntry(parent=self, relief=DGG.GROOVE, scale=0.08, pos=(1.6, 0, 0.3), borderWidth=(0.05, 0.05), state=DGG.NORMAL, text_font=FONT, frameColor=((1, 1, 1, 1), (1, 1, 1, 1), (0.5, 0.5, 0.5, 0.5)), text_align=TextNode.ALeft, text_scale=0.8, width=3.5, numLines=1, focus=1, backgroundFocus=0, cursorKeys=1, text_fg=(0, 0, 0, 1), suppressMouse=1, autoCapitalize=0, command=self.__changeShirt) self.shirtEntry.enterText(str(self.dna.topTex)) self.shirtLabel = DirectLabel(parent=self.shirtEntry, relief=None, text_font=FONT, text='Shirt:', text_scale=0.85, pos=(1.25, 0, 1.25)) self.shortsEntry = DirectEntry(parent=self, relief=DGG.GROOVE, scale=0.08, pos=(1.6, 0, 0.0), borderWidth=(0.05, 0.05), state=DGG.NORMAL, text_font=FONT, frameColor=((1, 1, 1, 1), (1, 1, 1, 1), (0.5, 0.5, 0.5, 0.5)), text_align=TextNode.ALeft, text_scale=0.8, width=3.5, numLines=1, focus=1, backgroundFocus=0, cursorKeys=1, text_fg=(0, 0, 0, 1), suppressMouse=1, autoCapitalize=0, command=self.__changeShorts) self.shortsEntry.enterText(str(self.dna.botTex)) self.shortsLabel = DirectLabel(parent=self.shortsEntry, relief=None, text_font=FONT, text='Shorts:', text_scale=0.85, pos=(1.25, 0, 1.25)) buttonModels = loader.loadModel('phase_3.5/models/gui/inventory_gui') upButton = buttonModels.find('**//InventoryButtonUp') downButton = buttonModels.find('**/InventoryButtonDown') rolloverButton = buttonModels.find('**/InventoryButtonRollover') self.doneButton = DirectButton(parent=self, text_font=FONT, text='Done', command=self.__handleDone, scale=0.2, image=(upButton, downButton, rolloverButton), relief=None, text_fg=(1, 1, 0.65, 1), pos=(0, 0, -0.94), text_pos=(0, -.23), image_color=(1, 0, 0, 1), image_scale=(20, 1, 15), sortOrder=DGG.GEOM_SORT_INDEX) buttonModels.removeNode() def __handleDone(self): base.localAvatar.b_setDNAString(self.dna.makeNetString()) self.unload() def unload(self): if self.genderLabel: self.genderLabel.destroy() self.genderLabel = None if self.genderOptions: self.genderOptions.destroy() self.genderOptions = None if self.speciesLabel: self.speciesLabel.destroy() self.speciesLabel = None if self.speciesOptions: self.speciesOptions.destroy() self.speciesOptions = None if self.headLabel: self.headLabel.destroy() self.headLabel = None if self.headOptions: self.headOptions.destroy() self.headOptions = None if self.muzzleLabel: self.muzzleLabel.destroy() self.muzzleLabel = None if self.muzzleOptions: self.muzzleOptions.destroy() self.muzzleOptions = None if self.torsoLabel: self.torsoLabel.destroy() self.torsoLabel = None if self.torsoOptions: self.torsoOptions.destroy() self.torsoOptions = None if self.legLabel: self.legLabel.destroy() self.legLabel = None if self.legOptions: self.legOptions.destroy() self.legOptions = None if self.gloveLabel: self.gloveLabel.destroy() self.gloveLabel = None if self.gloveOptions: self.gloveOptions.destroy() self.gloveOptions = None if self.headColorOptions: self.headColorOptions.destroy() self.headColorOptions = None if self.headColorLabel: self.headColorLabel.destroy() self.headColorLabel = None if self.armColorOptions: self.armColorOptions.destroy() self.armColorOptions = None if self.armColorLabel: self.armColorLabel.destroy() self.armColorLabel = None if self.legColorOptions: self.legColorOptions.destroy() self.legColorOptions = None if self.legColorLabel: self.legColorLabel.destroy() self.legColorLabel = None if self.shirtColorLabel: self.shirtColorLabel.destroy() self.shirtColorLabel = None if self.shirtColorOptions: self.shirtColorOptions.destroy() self.shirtColorOptions = None if self.bottomsColorLabel: self.bottomsColorLabel.destroy() self.bottomsColorLabel = None if self.bottomsColorOptions: self.bottomsColorOptions.destroy() self.bottomsColorOptions = None if self.shirtLabel: self.shirtLabel.destroy() self.shirtLabel = None if self.shirtEntry: self.shirtEntry.destroy() self.shirtEntry = None if self.shortsLabel: self.shortsLabel.destroy() self.shortsLabel = None if self.shortsEntry: self.shortsEntry.destroy() self.shortsEntry = None if self.doneButton: self.doneButton.destroy() self.doneButton = None if self.toon: self.toon.cleanup() self.toon.delete() self.toon.removeNode() self.toon = None self.dna = None self._callback(self) self.destroy()
class GUI_3: def __init__(self, rootParent=None): self.pg149 = DirectLabel( frameSize=(-3.15, 3.25, -0.113, 0.725), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0.525), scale=LVecBase3f(0.1, 0.1, 0.1), text='Moderators', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=rootParent, ) self.pg149.setTransparency(0) self.pg422 = DirectScrolledList( forceHeight=0.1, scale=LVecBase3f(10, 10, 10), frameSize=(-0.5, 0.5, -0.01, 0.75), hpr=LVecBase3f(0, 0, 0), numItemsVisible=5, pos=LPoint3f(0, 0, -7.9), state='normal', text='', decButton_borderWidth=(0.005, 0.005), decButton_hpr=LVecBase3f(0, 0, 0), decButton_pos=LPoint3f(-0.45, 0, 0.03), decButton_state='disabled', decButton_text='Prev', decButton_text_align=TextNode.A_left, decButton_text_scale=(0.05, 0.05), decButton_text_pos=(0, 0), decButton_text_fg=LVecBase4f(0, 0, 0, 1), decButton_text_bg=LVecBase4f(0, 0, 0, 0), decButton_text_wordwrap=None, incButton_borderWidth=(0.005, 0.005), incButton_hpr=LVecBase3f(0, 0, 0), incButton_pos=LPoint3f(0.45, 0, 0.03), incButton_state='disabled', incButton_text='Next', incButton_text_align=TextNode.A_right, incButton_text_scale=(0.05, 0.05), incButton_text_pos=(0, 0), incButton_text_fg=LVecBase4f(0, 0, 0, 1), incButton_text_bg=LVecBase4f(0, 0, 0, 0), incButton_text_wordwrap=None, itemFrame_frameColor=(1, 1, 1, 1), itemFrame_frameSize=(-0.47, 0.47, -0.5, 0.1), itemFrame_hpr=LVecBase3f(0, 0, 0), itemFrame_pos=LPoint3f(0, 0, 0.6), text_align=TextNode.A_center, text_scale=(0.1, 0.1), text_pos=(0, 0.015), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.pg149, ) self.pg422.setTransparency(0) self.pg1117 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), scale=LVecBase3f(0.1, 0.1, 0.1), state='disabled', text='Marcic_Admin', text_align=TextNode.A_center, text_scale=(1, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.pg422, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg1118 = DirectScrolledListItem( frameSize=(-3.831250286102295, 3.9062500953674317, -0.21250001192092896, 0.85), hpr=LVecBase3f(0, 0, 0), pos=LPoint3f(0, 0, 0), scale=LVecBase3f(0.1, 0.1, 0.1), state='disabled', text='panda3dmastercoder', text_align=TextNode.A_center, text_scale=(0.8, 1), text_pos=(0, 0), text_fg=LVecBase4f(0, 0, 0, 1), text_bg=LVecBase4f(0, 0, 0, 0), text_wordwrap=None, parent=self.pg422, command=base.messenger.send, extraArgs=['select_list_item_changed'], ) self.pg1117.setTransparency(0) self.pg422.addItem(self.pg1117) self.pg422.addItem(self.pg1118) def show(self): self.pg149.show() def hide(self): self.pg149.hide() def destroy(self): self.pg149.destroy()
class NameEntry: def __init__(self, items=SIGNS, menu=False): self.items = items self.menu = menu base.cam.set_pos(0, 0, 0) base.cam.set_hpr(0, 0, 0) self.currentSign = 0 self.currentFrameID = 0 self.currentFrame = None self.sound_lo = loader.load_sfx("assets/sfx/pong_lo.wav") self.sound_lo.set_volume(0.4) self.sound_ye = loader.load_sfx("assets/sfx/pickup.wav") self.sound_ye.set_volume(0.4) self.sound_no = loader.load_sfx("assets/sfx/bounce.wav") self.sound_no.set_volume(0.4) self.repeating = 0 self.spinnerNode = NodePath("spinner") self.spinnerNode.setPos(0, 3, -0.2) self.spinnerNode.setHpr(-90, 0, 0) self.spinnerNode.setShaderAuto(True) size = (-0.15, 0.15, -0.05, 0.375) z = 0.5 if menu: self.spinnerNode.setScale(0.6) self.spinnerNode.setZ(-0.4) else: self.help = DirectLabel( text= "left/right = Choose sign | up = Select sign | down = remove/back", frameColor=(0, 0, 0, 0), text_fg=(1, 1, 1, 1), pos=(0, 0, -0.8), scale=0.07) self.first = DirectFrame(text="", frameColor=(0, 0, 0, 1), frameSize=size, pos=(-0.4, 0, z), text_scale=0.35, text_fg=(1, 1, 1, 1), text_font=base.font, text_align=TextNode.ACenter) self.second = DirectFrame(text="", frameColor=(0, 0, 0, 1), frameSize=size, pos=(0, 0, z), text_scale=0.35, text_fg=(1, 1, 1, 1), text_font=base.font, text_align=TextNode.ACenter) self.third = DirectFrame(text="", frameColor=(0, 0, 0, 1), frameSize=size, pos=(0.4, 0, z), text_scale=0.35, text_fg=(1, 1, 1, 1), text_font=base.font, text_align=TextNode.ACenter) self.currentFrame = self.first self.arrowA = DirectFrame(frameSize=(-0.1, 0.1, -0.1, 0.1), frameColor=(0, 0, 0, 0), pos=(-0.4, 0, z - 0.15), image="assets/gui/arrow.png", image_scale=0.2, scale=0.5) self.arrowA.setTransparency(1) self.arrowB = DirectFrame(frameSize=(-0.1, 0.1, -0.1, 0.1), frameColor=(0, 0, 0, 0), pos=(0, 0, -0.5), image="assets/gui/arrow.png", image_scale=0.2, scale=0.5) self.arrowB.setTransparency(1) self.task = base.task_mgr.add(self.update) r = 1 for i, sign in enumerate(self.items): deg = 2 * pi / len(self.items) t = deg * i x = r * cos(t) y = r * sin(t) s = TextNode(sign) s.setText(sign) s.setAlign(TextNode.ACenter) s.setFont(base.font) s.setTextColor(1, 1, 1, 1) snp = self.spinnerNode.attachNewNode(s) snp.setScale(0.2) if sign == "end": snp.setScale(0.1) snp.setPos(x, y, 0) snp.setHpr(90 + i * (360 / len(self.items)), 0, 0) self.spinnerNode.reparentTo(render) self.delay = 0.2 def activate(self): self.sound_ye.play() if self.currentSign == 0: base.messenger.send("do_start") elif self.currentSign == 1: base.messenger.send("do_highscore") else: base.messenger.send("do_quit") def tick(self): self.delay -= globalClock.get_dt() if self.delay < 0: return True def update(self, task): if self.tick(): context = base.device_listener.read_context('player') if context["move"] > 0.2: self.rotateRight() if self.repeating: self.delay = 0.2 * (0.9**self.repeating) self.repeating += 1 else: self.delay = 0.2 self.repeating = 1 elif context['move'] < -0.2: self.rotateLeft() if self.repeating: self.delay = 0.2 * (0.9**self.repeating) self.repeating += 1 else: self.delay = 0.2 self.repeating = 1 elif context["accelerate"] or context["select"]: self.addSign() self.delay = 0.2 self.repeating = False elif context["decelerate"] or context["backspace"]: self.removeSign() self.delay = 0.2 self.repeating = False else: self.delay = 0 self.repeating = False if self.spinnerNode: desired_h = -self.currentSign * 360 / len(self.items) - 90 current_h = self.spinnerNode.get_h() diff = (((desired_h - current_h) + 180) % 360) - 180 delta = diff * globalClock.dt * 10 if abs(delta) > abs(diff): delta = diff self.spinnerNode.set_h(current_h + delta) return task.cont def destroy(self): self.task.remove() self.spinnerNode.removeNode() if not self.menu: self.first.destroy() self.second.destroy() self.third.destroy() self.arrowA.destroy() self.arrowB.destroy() self.help.destroy() def addSign(self): if self.menu: self.activate() return else: self.sound_ye.play() if self.items[self.currentSign] == "end": base.messenger.send("nameEntryDone") return self.currentFrame.setText(self.items[self.currentSign]) if self.currentFrameID < 2: self.arrowA.setX(self.arrowA.getX() + 0.4) self.currentFrameID += 1 if self.currentFrameID == 0: self.currentFrame = self.first elif self.currentFrameID == 1: self.currentFrame = self.second elif self.currentFrameID == 2: self.currentFrame = self.third else: self.currentSign = SIGNS.index("end") def removeSign(self): if self.menu: self.activate() return if self.currentFrame["text"] != "": self.currentFrame.setText("") return if self.currentFrameID > 0: self.sound_no.play() self.arrowA.setX(self.arrowA.getX() - 0.4) self.currentFrameID -= 1 if self.currentFrameID == 0: self.currentFrame = self.first elif self.currentFrameID == 1: self.currentFrame = self.second elif self.currentFrameID == 2: self.currentFrame = self.third def get(self): return "{}{}{}".format(self.first["text"], self.second["text"], self.third["text"]) def rotateLeft(self): self.sound_lo.play() self.currentSign -= 1 if self.currentSign < 0: self.currentSign = len(self.items) - 1 def rotateRight(self): self.sound_lo.play() self.currentSign += 1 if self.currentSign >= len(self.items): self.currentSign = 0