def loading(*args): '''A context manager that shows a loading screen''' x = base.win.get_x_size() // 2 y = base.win.get_y_size() // 2 img = loader.load_texture('gui/loading.png') scale = (256, 0, 256) #img size//2 if ConfigVariableBool('framebuffer-srgb').getValue(): tex_format = img.get_format() if tex_format == Texture.F_rgb: tex_format = Texture.F_srgb elif tex_format == Texture.F_rgba: tex_format = Texture.F_srgb_alpha img.set_format(tex_format) load_screen = OnscreenImage(image=img, scale=scale, pos=(x, 0, -y), parent=pixel2d) load_screen.set_transparency(TransparencyAttrib.M_alpha) #render 3 frames because we may be in a threaded rendering pipeline #we render frames to make sure the load screen is shown base.graphicsEngine.renderFrame() base.graphicsEngine.renderFrame() base.graphicsEngine.renderFrame() try: yield finally: base.graphicsEngine.renderFrame() base.graphicsEngine.renderFrame() base.graphicsEngine.renderFrame() load_screen.remove_node()
def loading(*args): x = base.win.get_x_size() // 2 y = base.win.get_y_size() // 2 img = loader.load_texture('ui/loading.png') scale = (256, 0, 128) if ConfigVariableBool('framebuffer-srgb').getValue(): tex_format = img.get_format() if tex_format == Texture.F_rgb: tex_format = Texture.F_srgb elif tex_format == Texture.F_rgba: tex_format = Texture.F_srgb_alpha img.set_format(tex_format) load_screen = OnscreenImage(image=img, scale=scale, pos=(x, 0, -y), parent=pixel2d) #render 3 frames because we may be in a threded rendering pipeline #we render frames to make sure the load screen is shown base.graphicsEngine.renderFrame() base.graphicsEngine.renderFrame() base.graphicsEngine.renderFrame() try: yield finally: #render a few frames and fade out the loading screen for i in range(5): base.graphicsEngine.renderFrame() color = 1.0 - i / 5.0 load_screen.set_color(color, color, color) load_screen.remove_node()
class Level2: def __init__(self): self.text_pointers = [] self.keyboard = Controller() base.cam2dp.node().getDisplayRegion(0).setSort(-20) self.runner_font = loader.loadFont('./fonts/runner/BLADRMF_.TTF') self.p1 = player.Player() def start(self): # load self.level2 = loader.loadModel("models/CECUT.bam") self.level2.reparentTo(render) self.level2.setScale(1, 1, 1) self.level2.setPos(0,0, 0) # start camera.setPos(0.5,-8.5,4) camera.lookAt(self.level2) # start self.background = OnscreenImage( parent=render2dp, image="textures/Skunight.png") # Load an image object color = (0.8, 0.8, 0.8) #self.linfog = Fog("Scene-wide exponential Fog object") #self.linfog.setColor(*color) #self.linfog.setLinearRange(0, 35) #self.linfog.setLinearFallback(45, 160, 320) #render.setFog(self.linfog) base.setBackgroundColor(*color) self.plight = PointLight("plight") self.plight.setColor((1, 1, 1, 1)) self.plight.setAttenuation((1, 0, 1)) self.buttons() self.text = OnscreenText(font=self.runner_font, text='Que concierto deseas que se presente en el sotano de las ruinas del CECUT?', scale=0.09, pos=[ 0, 0.5], fg=[240, 10, 10, 1], shadow=[0.5, 0.5, 0.5, 0.5], shadowOffset=(0.04, 0.04),wordwrap=20) def __del__(self): print('[*] Destructor called') def buttons(self): self.option1 = DirectButton( text=("Good Bunny"), text_font=self.runner_font, scale=0.1, pos=(-0, -5, -0.75), frameTexture=None, command=self.onClick1, relief=DGG.FLAT) self.option2 = DirectButton( text=("Los Demonios de Ecatepan"), text_font=self.runner_font, scale=0.1, pos=(0, -5, -0.55), frameTexture=None, command=self.onClick2, relief=DGG.FLAT) self.option3 = DirectButton( text=("La filarmonica de Ensenada"), text_font=self.runner_font, scale=0.1, pos=(0, -5, -0.35), frameTexture=None, command=self.onClick3, relief=DGG.FLAT) def onClick1(self): print("[*] Click!") self.p1.change_pol(1) self.p1.change_edu(1) self.p1.change_pop(1) self.stop() def onClick2(self): print("[*] Click!") self.p1.change_pol(1) self.p1.change_edu(2) self.p1.change_pop(3) self.stop() def onClick3(self): print("[*] Click!") self.p1.change_pol(0) self.p1.change_edu(5) self.p1.change_pop(9) self.stop() def stop(self): self.p1.savefile() self.text.remove_node() self.option1.remove_node() self.option2.remove_node() self.option3.remove_node() self.background.remove_node() self.level2.remove_node() render.clearLight() self.keyboard.press('5' ) self.keyboard.release('5' ) self.__del__()
class Level4: def __init__(self): self.text_pointers = [] self.keyboard = Controller() base.cam2dp.node().getDisplayRegion(0).setSort(-20) self.runner_font = loader.loadFont('./fonts/runner/BLADRMF_.TTF') self.p1 = player.Player() def start(self): # load self.level4 = loader.loadModel("models/Picacho_diablo_11_068m.bam") self.level4.reparentTo(render) self.level4.setScale(1, 1, 1) self.level4.setPos(0, 0, 0) # start camera.setPos(-2, 2, 4) camera.lookAt(self.level4) # start self.background = OnscreenImage( parent=render2dp, image="textures/Skunight.png") # Load an image object color = (0.8, 0.8, 0.8) self.linfog = Fog("Scene-wide exponential Fog object") self.linfog.setColor(*color) self.linfog.setLinearRange(0, 35) self.linfog.setLinearFallback(45, 160, 320) render.setFog(self.linfog) base.setBackgroundColor(*color) self.plight = PointLight("plight") self.plight.setColor((1, 1, 1, 1)) self.plight.setAttenuation((1, 0, 1)) self.buttons() self.text = OnscreenText( font=self.runner_font, text= 'La comunidad sin hogares de Baja California se ha reubicado al PICACHO DEL DIABLO!', scale=0.09, pos=[0, 0.5], fg=[240, 10, 10, 1], shadow=[0.5, 0.5, 0.5, 0.5], shadowOffset=(0.04, 0.04), wordwrap=20) def __del__(self): print('[*] Destructor called') def buttons(self): self.option1 = DirectButton(text=("NUKE 'EM BOYS"), text_font=self.runner_font, scale=0.1, pos=(0, -5, -0.75), frameTexture=None, command=self.onClick1, relief=DGG.FLAT) self.option2 = DirectButton(text=("construir barda"), text_font=self.runner_font, scale=0.1, pos=(0, -5, -0.55), frameTexture=None, command=self.onClick2, relief=DGG.FLAT) self.option3 = DirectButton(text=("cortarles recursos e ignorar"), text_font=self.runner_font, scale=0.1, pos=(0, -5, -0.35), frameTexture=None, command=self.onClick3, relief=DGG.FLAT) def onClick1(self): print("[*] Click!") self.p1.change_pol(1) self.p1.change_edu(1) self.p1.change_pop(1) self.stop() def onClick2(self): print("[*] Click!") self.p1.change_pol(1) self.p1.change_edu(2) self.p1.change_pop(3) self.stop() def onClick3(self): print("[*] Click!") self.p1.change_pol(0) self.p1.change_edu(5) self.p1.change_pop(9) self.stop() def stop(self): self.p1.savefile() self.text.remove_node() self.option1.remove_node() self.option2.remove_node() self.option3.remove_node() self.background.remove_node() self.level4.remove_node() render.clearLight() self.keyboard.press('7') self.keyboard.release('7') self.__del__()
class Sprite(RPObject): """ Simple wrapper arround OnscreenImage, providing a simpler interface """ def __init__(self, image=None, parent=None, x=0, y=0, w=None, h=None, transparent=True, near_filter=True, any_filter=True): """ Creates a new image, taking (x,y) as topleft coordinates. When near_filter is set to true, a near filter will be set to the texture passed. This provides sharper images. When any_filter is set to false, the passed image won't be modified at all. This enables you to display existing textures, otherwise the texture would get a near filter in the 3D View, too. """ RPObject.__init__(self) if not isinstance(image, Texture): if not isinstance(image, str): self.warn("Invalid argument to image parameter:", image) return image = RPLoader.load_texture(image) if w is None or h is None: w, h = image.get_x_size(), image.get_y_size() else: if w is None or h is None: w = 10 h = 10 self._width, self._height = w, h self._initial_pos = self._translate_pos(x, y) self.node = OnscreenImage( image=image, parent=parent, pos=self._initial_pos, scale=(self._width / 2.0, 1, self._height / 2.0)) if transparent: self.node.set_transparency(TransparencyAttrib.M_alpha) tex = self.node.get_texture() # Apply a near filter, but only if the parent has no scale, otherwise # it will look weird if near_filter and any_filter and parent.get_sx() == 1.0: tex.set_minfilter(SamplerState.FT_nearest) tex.set_magfilter(SamplerState.FT_nearest) if any_filter: tex.set_anisotropic_degree(8) tex.set_wrap_u(SamplerState.WM_clamp) tex.set_wrap_v(SamplerState.WM_clamp) def get_initial_pos(self): """ Returns the initial position of the image. This can be used for animations """ return self._initial_pos def pos_interval(self, *args, **kwargs): """ Returns a pos interval, this is a wrapper around NodePath.posInterval """ return self.node.posInterval(*args, **kwargs) def hpr_interval(self, *args, **kwargs): """ Returns a hpr interval, this is a wrapper around NodePath.hprInterval """ return self.node.hprInterval(*args, **kwargs) def color_scale_interval(self, *args, **kwargs): """ Returns a color scale interval, this is a wrapper around NodePath.colorScaleInterval """ return self.node.colorScaleInterval(*args, **kwargs) def set_image(self, img): """ Sets the current image """ self.node.set_image(img) def get_width(self): """ Returns the width of the image in pixels """ return self._width def get_height(self): """ Returns the height of the image in pixels """ return self._height def set_pos(self, x, y): """ Sets the position """ self.node.set_pos(self._translate_pos(x, y)) def _translate_pos(self, x, y): """ Converts 2d coordinates to pandas coordinate system """ return Vec3(x + self._width / 2.0, 1, -y - self._height / 2.0) def set_shader(self, shader): """ Sets a shader to be used for rendering the image """ self.node.set_shader(shader) def set_shader_input(self, *args): """ Sets a shader input on the image """ self.node.set_shader_input(*args) def set_shader_inputs(self, **kwargs): """ Sets multiple shader inputs on the image """ self.node.set_shader_inputs(**kwargs) def remove(self): """ Removes the image """ self.node.remove_node() def hide(self): """ Hides the image """ self.node.hide() def show(self): """ Shows the image if it was previously hidden """ self.node.show() def is_hidden(self): """ Returns whether the image is hidden """ return self.node.is_hidden()
class Level1: def __init__(self): self.text_pointers = [] self.keyboard = Controller() base.cam2dp.node().getDisplayRegion(0).setSort(-20) self.runner_font = loader.loadFont('./fonts/runner/BLADRMF_.TTF') self.p1 = player.Player() def start(self): self.level1 = loader.loadModel("models/Campestre_light.bam") self.level1.reparentTo(render) self.level1.setScale(1, 1, 1) self.level1.setPos(0, 0, 0) camera.setPos(-2, 2, 4) camera.lookAt(self.level1) self.background = OnscreenImage( parent=render2dp, image="textures/Skunight.png") # Load an image object color = (0.8, 0.8, 0.8) self.linfog = Fog("Scene-wide exponential Fog object") self.linfog.setColor(*color) self.linfog.setLinearRange(0, 35) self.linfog.setLinearFallback(45, 160, 320) render.setFog(self.linfog) base.setBackgroundColor(*color) self.plight = PointLight("plight") self.plight.setColor((1, 1, 1, 1)) self.plight.setAttenuation((1, 0, 1)) self.buttons() self.text = OnscreenText( font=self.runner_font, text= 'El emperador Hank convirtio el campo Campestre en un campo de practica para Xolos. Ahora eres alcalde:', scale=0.09, pos=[0, 0.5], fg=[240, 10, 10, 1], shadow=[0.5, 0.5, 0.5, 0.5], shadowOffset=(0.04, 0.04), wordwrap=20) def __del__(self): print('[*] Destructor called') def buttons(self): self.option1 = DirectButton(text=("dejarlo"), text_font=self.runner_font, scale=0.1, pos=(-1, -5, -0.75), frameTexture=None, command=self.onClick1, relief=DGG.FLAT) self.option2 = DirectButton(text=("quemarlo"), text_font=self.runner_font, scale=0.1, pos=(0, -5, -0.75), frameTexture=None, command=self.onClick2, relief=DGG.FLAT) self.option3 = DirectButton(text=("adaptarlo"), text_font=self.runner_font, scale=0.1, pos=(1, -5, -0.75), frameTexture=None, command=self.onClick3, relief=DGG.FLAT) def onClick1(self): print("[*] Click!") self.p1.change_pol(1) self.p1.change_edu(1) self.p1.change_pop(1) self.stop() def onClick2(self): print("[*] Click!") self.p1.change_pol(1) self.p1.change_edu(2) self.p1.change_pop(3) self.stop() def onClick3(self): print("[*] Click!") self.p1.change_pol(0) self.p1.change_edu(5) self.p1.change_pop(9) self.stop() def stop(self): self.p1.savefile() self.text.remove_node() self.option1.remove_node() self.option2.remove_node() self.option3.remove_node() self.background.remove_node() self.level1.remove_node() render.clearLight() self.keyboard.press('4') self.keyboard.release('4') self.__del__()
class Level3: def __init__(self): self.text_pointers = [] self.keyboard = Controller() base.cam2dp.node().getDisplayRegion(0).setSort(-20) self.runner_font = loader.loadFont('./fonts/runner/BLADRMF_.TTF') self.p1 = player.Player() def start(self): # load self.level3 = loader.loadModel("models/Estacionamiento_Long.bam") self.level3.reparentTo(render) self.level3.setScale(1, 1, 1) self.level3.setPos(0, 0, 0) # start camera.setPos(-2, 2, 4) camera.lookAt(self.level3) # start self.background = OnscreenImage( parent=render2dp, image="textures/Skunight.png") # Load an image object color = (0.8, 0.8, 0.8) self.linfog = Fog("Scene-wide exponential Fog object") self.linfog.setColor(*color) self.linfog.setLinearRange(0, 35) self.linfog.setLinearFallback(45, 160, 320) render.setFog(self.linfog) base.setBackgroundColor(*color) self.plight = PointLight("plight") self.plight.setColor((1, 1, 1, 1)) self.plight.setAttenuation((1, 0, 1)) self.buttons() self.text = OnscreenText(font=self.runner_font, text='Propone el uso de la vieja Monumental', scale=0.09, pos=[0, 0.5], fg=[240, 10, 10, 1], shadow=[0.5, 0.5, 0.5, 0.5], shadowOffset=(0.04, 0.04), wordwrap=20) def __del__(self): print('[*] Destructor called') def buttons(self): self.option1 = DirectButton(text=("un parque"), text_font=self.runner_font, scale=0.1, pos=(0, -5, -0.75), frameTexture=None, command=self.onClick1, relief=DGG.FLAT) self.option2 = DirectButton(text=("una maquila solar"), text_font=self.runner_font, scale=0.1, pos=(0, -5, -0.55), frameTexture=None, command=self.onClick2, relief=DGG.FLAT) self.option3 = DirectButton(text=("un terreno valdio"), text_font=self.runner_font, scale=0.1, pos=(0, -5, -0.35), frameTexture=None, command=self.onClick3, relief=DGG.FLAT) def onClick1(self): print("[*] Click!") self.p1.change_pol(1) self.p1.change_edu(1) self.p1.change_pop(1) self.stop() def onClick2(self): print("[*] Click!") self.p1.change_pol(1) self.p1.change_edu(2) self.p1.change_pop(3) self.stop() def onClick3(self): print("[*] Click!") self.p1.change_pol(0) self.p1.change_edu(5) self.p1.change_pop(9) self.stop() def stop(self): self.p1.savefile() self.text.remove_node() self.option1.remove_node() self.option2.remove_node() self.option3.remove_node() self.background.remove_node() self.level3.remove_node() render.clearLight() self.keyboard.press('6') self.keyboard.release('6') self.__del__()