Пример #1
0
class Terrain(BaseObject):
    COLLISION_MASK = CollisionGroup.Terrain
    HEIGHT = 0.0

    def __init__(self):
        super(Terrain, self).__init__(random_seed=0)
        shape = BulletPlaneShape(Vec3(0, 0, 1), 0)
        node = BulletRigidBodyNode(BodyName.Ground)
        node.setFriction(.9)
        node.addShape(shape)

        node.setIntoCollideMask(self.COLLISION_MASK)
        self.dynamic_nodes.append(node)

        self.origin.attachNewNode(node)
        if self.render:
            self.origin.hide(CamMask.MiniMap | CamMask.Shadow
                             | CamMask.DepthCam | CamMask.ScreenshotCam)
            # self.terrain_normal = self.loader.loadTexture(
            #     AssetLoader.file_path( "textures", "grass2", "normal.jpg")
            # )
            self.terrain_texture = self.loader.loadTexture(
                AssetLoader.file_path("textures", "ground.png"))
            self.terrain_texture.setWrapU(Texture.WM_repeat)
            self.terrain_texture.setWrapV(Texture.WM_repeat)
            self.ts_color = TextureStage("color")
            self.ts_normal = TextureStage("normal")
            self.ts_normal.set_mode(TextureStage.M_normal)
            self.origin.setPos(0, 0, self.HEIGHT)
            cm = CardMaker('card')
            scale = 20000
            cm.setUvRange((0, 0), (scale / 10, scale / 10))
            card = self.origin.attachNewNode(cm.generate())
            # scale = 1 if self.use_hollow else 20000
            card.set_scale(scale)
            card.setPos(-scale / 2, -scale / 2, -0.1)
            card.setZ(-.05)
            card.setTexture(self.ts_color, self.terrain_texture)
            # card.setTexture(self.ts_normal, self.terrain_normal)
            self.terrain_texture.setMinfilter(
                SamplerState.FT_linear_mipmap_linear)
            self.terrain_texture.setAnisotropicDegree(8)
            card.setQuat(
                LQuaternionf(math.cos(-math.pi / 4), math.sin(-math.pi / 4), 0,
                             0))
Пример #2
0
 def set_drv_txt_img(page, i, car_name, pos_x, top, text, players):
     drivers = [player.driver for player in players]
     info('drivers: ' + str([drv for drv in drivers]))
     info('i: %s  - carname: %s - text: %s' % (i, car_name, text))
     drv = next(player.driver for player in players
                if player.car == car_name)
     player_car_names = [
         player.car for player in players if player.kind == Player.human
     ]
     is_player_car = car_name in player_car_names
     info('%s %s %s %s' %
          (text % drv.name, car_name, drv.img_idx, is_player_car))
     name = text % drv.name
     if '@' in name:
         name = name.split('@')[0] + '\1smaller\1@' + name.split('@')[1] + \
             '\2'
     txt = Text(name,
                align='left',
                scale=.072,
                pos=(pos_x, top - i * .16),
                font=page.font,
                fg=page.text_fg if is_player_car else page.text_bg)
     gprops = page.rprops.season_props.gameprops
     img = Img(gprops.cars_img % car_name,
               pos=(pos_x - .16, top + .02 - i * .16),
               scale=.074)
     filtervpath = RankingGui.eng.curr_path + \
         'yyagl/assets/shaders/filter.vert'
     with open(filtervpath) as fvs:
         vert = fvs.read()
     drvfpath = RankingGui.eng.curr_path + \
         'yyagl/assets/shaders/drv_car.frag'
     with open(drvfpath) as ffs:
         frag = ffs.read()
     shader = load_shader(vert, frag)
     if shader:
         img.set_shader(shader)
     img.set_transparent()
     t_s = TextureStage('ts')
     t_s.set_mode(TextureStage.MDecal)
     txt_path = gprops.drivers_img.path_sel % drv.img_idx
     img.set_texture(t_s, loader.loadTexture(txt_path))
     return txt, img
Пример #3
0
class DriverPageGui(ThanksPageGui):

    def __init__(self, mediator, driverpage_props, nplayers=1):
        self.props = driverpage_props
        self.sel_drv_img = None
        self.driver = None
        nplayers = list(range(nplayers))
        ThanksPageGui.__init__(self, mediator, driverpage_props.gameprops.menu_props, nplayers)

    def build(self, exit_behav):
        self.drv_info = self.props.gameprops.drivers_info
        menu_props = self.menu_props
        widgets = [Text(_('Select the driver'), pos=(0, .8),
                                **menu_props.text_args)]
        t_a = self.menu_props.text_args.copy()
        del t_a['scale']
        self.name = Text(_('Write your name:'), pos=(-.1, .6), scale=.06,
                            align='right', wordwrap=128, **t_a)
        self.drivers = []
        for row, col in product(range(2), range(4)):
            idx = col + row * 4
            drv_btn = ImgBtn(
                scale=(.24, .24), pos=(-.75 + col * .5, .3 - row * .64),
                frame_col=(0, 0, 0, 0),
                img=self.props.gameprops.drivers_img.path % idx,
                cmd=self.on_click, extra_args=[idx],
                **self.menu_props.imgbtn_args)
            name = Text(
                '',
                pos=(-.75 + col * .5, .01 - row * .64),
                scale=.046, **t_a)
            drv_btn._name_txt = name
            widgets += [drv_btn, name]
            self.drivers += [widgets[-2]]
            sign = lambda pos_x: '\1green\1+\2' if pos_x > 0 else ''
            psign = lambda pos_x, sgn=sign: '+' if pos_x == 0 else sgn(pos_x)

            def ppcol(x):
                return '\1green\1%s\2' % x if x > 0 else '\1red\1%s\2' % x
            pcol = lambda x: x if x == 0 else ppcol(x)
            lab_lst = [(_('adherence'), .09), (_('speed'), .21),
                       (_('stability'), .15)]
            widgets += list(map(
                lambda lab_def: self._add_lab(*(lab_def + (row, col))),
                lab_lst))
            txt_lst = [(self.drv_info[idx - 1].adherence, .09),
                       (self.drv_info[idx - 1].speed, .21),
                       (self.drv_info[idx - 1].stability, .15)]
            widgets += list(map(
                lambda txt_def: self._add_txt(
                    *txt_def + (psign, pcol, col, row)),
                txt_lst))
        self.sel_drv_img = Img(
            self.props.gameprops.cars_img % self.mediator.car,
            parent=base.a2dBottomLeft, pos=(.3, .4), scale=.28)
        instr_txt = _(
            'If you use the keyboard, press FIRE to edit the field, then '
            "ENTER when you're done")
        instr = Text(instr_txt, pos=(1.4, .6), scale=.042, wordwrap=16, **t_a)
        widgets += [self.sel_drv_img, self.name, instr]
        self.add_widgets(widgets)
        ffilterpath = self.eng.curr_path + 'yyagl/assets/shaders/filter.vert'
        with open(ffilterpath) as ffilter:
            vert = ffilter.read()
        shader = load_shader(vert, frag)
        if shader:
            self.sel_drv_img.set_shader(shader)
        self.sel_drv_img.set_transparent()
        self.t_s = TextureStage('ts')
        self.t_s.set_mode(TextureStage.MDecal)
        empty_img = PNMImage(1, 1)
        empty_img.add_alpha()
        empty_img.alpha_fill(0)
        tex = Texture()
        tex.load(empty_img)
        self.sel_drv_img.set_texture(self.t_s, tex)
        ThanksPageGui.build(self, exit_behav=exit_behav)

    def _add_lab(self, txt, pos_z, row, col):
        t_a = self.menu_props.text_args.copy()
        del t_a['scale']
        return Text(
            txt + ':', pos=(-.95 + col * .5, pos_z - row * .64),
            scale=.046, align='left', **t_a)

    def _add_txt(self, val, pos_z, psign, pcol, col, row):
        t_a = self.menu_props.text_args.copy()
        del t_a['scale']
        return Text(
            '%s%s%%' % (psign(val), pcol(val)),
            pos=(-.55 + col * .5, pos_z - row * .64), scale=.052,
            align='right', **t_a)

    def enable_buttons(self, enable):
        [(drv.enable if enable else drv.disable)() for drv in self.drivers]

    def on_click(self, i):
        self.eng.log('selected driver ' + str(i))
        gprops = self.props.gameprops
        txt_path = gprops.drivers_img.path_sel
        self.sel_drv_img.set_texture(self.t_s, loader.loadTexture(txt_path % i))
        self.widgets[-1]['state'] = DISABLED
        self.enable_buttons(False)
        taskMgr.remove(self.update_tsk)
        cars = gprops.cars_names[:]
        car_idx = cars.index(self.mediator.car)
        cars.remove(self.mediator.car)
        shuffle(cars)
        drv_idx = list(range(8))
        drv_idx.remove(i)
        shuffle(drv_idx)
        prev_drv = gprops.drivers_info[car_idx]
        gprops.drivers_info[car_idx] = gprops.drivers_info[i]
        gprops.drivers_info[car_idx].img_idx = i
        nname = self.this_name()
        gprops.drivers_info[car_idx].name = nname
        gprops.drivers_info[i] = prev_drv
        self.eng.log('drivers: ' + str(gprops.drivers_info))
        self.notify('on_driver_selected', self.ent.text, self.mediator.track,
                    self.mediator.car)

    def _buttons(self, idx):
        return [btn for btn in self.buttons if btn['extraArgs'] == [idx]]

    def destroy(self):
        self.sel_drv_img = None
        PageGui.destroy(self)
Пример #4
0
class DriverPageGui(ThanksPageGui):

    def __init__(self, mediator, driverpage_props):
        self.props = driverpage_props
        self.sel_drv_img = None
        self.driver = None
        ThanksPageGui.__init__(self, mediator, driverpage_props.gameprops.menu_args)

    def build(self, exit_behav):
        self.drv_info = self.props.gameprops.drivers_info
        menu_args = self.menu_args
        widgets = [Text(_('Select the driver'), pos=(-.2, .8),
                                **menu_args.text_args)]
        t_a = self.menu_args.text_args.copy()
        del t_a['scale']
        self.name = Text(_('Write your name:'), pos=(-.3, .6), scale=.06,
                            align='right', wordwrap=128, **t_a)
        self.drivers = []
        for row, col in product(range(2), range(4)):
            idx = col + row * 4
            drv_btn = ImgBtn(
                scale=.24, pos=(-.95 + col * .5, 1, .3 - row * .64),
                frameColor=(0, 0, 0, 0),
                image=self.props.gameprops.drivers_img.path % idx,
                command=self.on_click, extraArgs=[idx],
                **self.menu_args.imgbtn_args)
            name = Text(
                '',
                pos=(-.95 + col * .5, .01 - row * .64),
                scale=.046, **t_a)
            drv_btn._name_txt = name
            widgets += [drv_btn, name]
            self.drivers += [widgets[-1]]
            sign = lambda pos_x: '\1green\1+\2' if pos_x > 0 else ''
            psign = lambda pos_x, sgn=sign: '+' if pos_x == 0 else sgn(pos_x)

            def ppcol(x):
                return '\1green\1%s\2' % x if x > 0 else '\1red\1%s\2' % x
            pcol = lambda x: x if x == 0 else ppcol(x)
            lab_lst = [(_('adherence'), .09), (_('speed'), .21),
                       (_('stability'), .15)]
            widgets += map(
                lambda lab_def: self.__add_lab(*(lab_def + (row, col))),
                lab_lst)
            txt_lst = [(self.drv_info[idx - 1].adherence, .09),
                       (self.drv_info[idx - 1].speed, .21),
                       (self.drv_info[idx - 1].stability, .15)]
            widgets += map(
                lambda txt_def: self.__add_txt(
                    *txt_def + (psign, pcol, col, row)),
                txt_lst)
        self.sel_drv_img = Img(
            self.props.gameprops.cars_img % self.mediator.car,
            parent=base.a2dBottomLeft, pos=(.3, 1, .4), scale=.28)
        widgets += [self.sel_drv_img, self.name]
        self.add_widgets(widgets)
        ffilterpath = self.eng.curr_path + 'yyagl/assets/shaders/filter.vert'
        with open(ffilterpath) as ffilter:
            vert = ffilter.read()
        shader = load_shader(vert, frag)
        if shader:
            self.sel_drv_img.set_shader(shader)
        self.sel_drv_img.set_transparency(True)
        self.t_s = TextureStage('ts')
        self.t_s.set_mode(TextureStage.MDecal)
        empty_img = PNMImage(1, 1)
        empty_img.add_alpha()
        empty_img.alpha_fill(0)
        tex = Texture()
        tex.load(empty_img)
        self.sel_drv_img.set_texture(self.t_s, tex)
        ThanksPageGui.build(self, exit_behav=exit_behav)

    def __add_lab(self, txt, pos_z, row, col):
        t_a = self.menu_args.text_args.copy()
        del t_a['scale']
        return Text(
            txt + ':', pos=(-1.15 + col * .5, pos_z - row * .64),
            scale=.046, align='left', **t_a)

    def __add_txt(self, val, pos_z, psign, pcol, col, row):
        t_a = self.menu_args.text_args.copy()
        del t_a['scale']
        return Text(
            '%s%s%%' % (psign(val), pcol(val)),
            pos=(-.75 + col * .5, pos_z - row * .64), scale=.052,
            align='right', **t_a)

    def enable_buttons(self, enable):
        [(drv.enable if enable else drv.disable)() for drv in self.drivers]

    def on_click(self, i):
        self.eng.log('selected driver ' + str(i))
        gprops = self.props.gameprops
        txt_path = gprops.drivers_img.path_sel
        self.sel_drv_img.set_texture(self.t_s, loader.loadTexture(txt_path % i))
        self.widgets[-1]['state'] = DISABLED
        self.enable_buttons(False)
        taskMgr.remove(self.update_tsk)
        cars = gprops.cars_names[:]
        car_idx = cars.index(self.mediator.car)
        cars.remove(self.mediator.car)
        shuffle(cars)
        drv_idx = range(8)
        drv_idx.remove(i)
        shuffle(drv_idx)
        prev_drv = gprops.drivers_info[car_idx]
        gprops.drivers_info[car_idx] = gprops.drivers_info[i]
        gprops.drivers_info[car_idx].img_idx = i
        nname = self.this_name()
        gprops.drivers_info[car_idx].name = nname
        gprops.drivers_info[i] = prev_drv
        self.eng.log('drivers: ' + str(gprops.drivers_info))
        self.notify('on_driver_selected', self.ent.get(), self.mediator.track,
                    self.mediator.car)

    def _buttons(self, idx):
        return [btn for btn in self.buttons if btn['extraArgs'] == [idx]]

    def destroy(self):
        self.sel_drv_img = None
        PageGui.destroy(self)
Пример #5
0
mat = Material()
mat.set_base_color((1.0, 1.0, 1.0, 1))
mat.set_emission((1.0, 1.0, 1.0, 1))
mat.set_metallic(1.0)
mat.set_roughness(1.0)
card.set_material(mat)

texture_size = 256

base_color_pnm = PNMImage(texture_size, texture_size)
base_color_pnm.fill(0.72, 0.45, 0.2)  # Copper
base_color_tex = Texture("BaseColor")
base_color_tex.load(base_color_pnm)
ts = TextureStage('BaseColor')  # a.k.a. Modulate
ts.set_mode(TextureStage.M_modulate)
card.set_texture(ts, base_color_tex)

# Emission; Gets multiplied with mat.emission
emission_pnm = PNMImage(texture_size, texture_size)
emission_pnm.fill(0.0, 0.0, 0.0)
emission_tex = Texture("Emission")
emission_tex.load(emission_pnm)
ts = TextureStage('Emission')
ts.set_mode(TextureStage.M_emission)
card.set_texture(ts, emission_tex)

# Ambient Occlusion, Roughness, Metallicity
# R: Ambient Occlusion
# G: Roughness, a.k.a. gloss map (if inverted); Gets multiplied with mat.roughness
# B: Metallicity; Gets multiplied with mat.metallic