class LoadIcon: """ A spinning icon. """ def __init__(self, mainScreen, x=0.0, y=0.0): self.main_screen = mainScreen self._image = OnscreenImage( image=self.main_screen.image_path + "load_icon.png", pos=(x, 0, y), parent=self.main_screen.gameEngine.render2d, scale=(0.07, 1, 0.07)) self._image.setTransparency(TransparencyAttrib.MAlpha) self.spin_task = None self._image.hide() def set_pos(self, x, y): """ Sets the position of the icon @param x: the relative x in the screen @param y: the relative y in the screen """ self._image.set_r(0) self._image.set_pos(x, 0, y) def start(self): """ Starts the spinning animation and shows it. """ self._image.set_r(0) self._image.show() self.spin_task = self._image.hprInterval(duration=2, hpr=(0, 0, 360)) self.spin_task.loop() def stop(self): """ Stops the spinning animation and hides it. @return: """ self.spin_task.finish() self._image.hide()
class CarPanel(GameObject): def __init__(self, car_props, player_idx, ncars, players): GameObject.__init__(self) self._players = players self.car_props = car_props self.player_idx = player_idx self.ncars = ncars sprops = self.car_props.race_props.season_props menu_props = sprops.gameprops.menu_props if ncars == 1: parent_tr = base.a2dTopRight elif ncars == 2: if self.player_idx == 0: parent_tr = base.a2dTopCenter else: parent_tr = base.a2dTopRight elif ncars == 3: if self.player_idx == 0: parent_tr = base.a2dTopRight elif self.player_idx == 1: parent_tr = base.aspect2d else: parent_tr = base.a2dRightCenter elif ncars == 4: if self.player_idx == 0: parent_tr = base.a2dTopCenter elif self.player_idx == 1: parent_tr = base.a2dTopRight elif self.player_idx == 2: parent_tr = base.aspect2d else: parent_tr = base.a2dRightCenter if ncars == 1: parent_tl = base.a2dTopLeft elif ncars == 2: if self.player_idx == 0: parent_tl = base.a2dTopLeft else: parent_tl = base.a2dTopCenter elif ncars == 3: if self.player_idx == 0: parent_tl = base.a2dTopLeft elif self.player_idx == 1: parent_tl = base.a2dLeftCenter else: parent_tl = base.aspect2d elif ncars == 4: if self.player_idx == 0: parent_tl = base.a2dTopLeft elif self.player_idx == 1: parent_tl = base.a2dTopCenter elif self.player_idx == 2: parent_tl = base.a2dLeftCenter else: parent_tl = base.aspect2d if ncars == 1: parent_bl = base.a2dBottomLeft elif ncars == 2: if self.player_idx == 0: parent_bl = base.a2dBottomLeft else: parent_bl = base.a2dBottomCenter elif ncars == 3: if self.player_idx == 0: parent_bl = base.a2dLeftCenter elif self.player_idx == 1: parent_bl = base.a2dBottomLeft else: parent_bl = base.a2dBottomCenter elif ncars == 4: if self.player_idx == 0: parent_bl = base.a2dLeftCenter elif self.player_idx == 1: parent_bl = base.aspect2d elif self.player_idx == 2: parent_bl = base.a2dBottomLeft else: parent_bl = base.a2dBottomCenter # if ncars == 1: parent_t = base.a2dTopCenter # elif ncars == 2: # if self.player_idx == 0: parent_t = base.a2dTopQuarter # else: parent_t = base.a2dTopThirdQuarter # elif ncars == 3: # if self.player_idx == 0: parent_t = base.a2dTop # elif self.player_idx == 1: parent_t = base.a2dCenterQuarter # else: parent_t = base.a2dCenterThirdQuarter # elif ncars == 4: # if self.player_idx == 0: parent_t = base.a2dTopQuarter # elif self.player_idx == 1: parent_t = base.a2dTopThirdQuarter # elif self.player_idx == 2: parent_t = base.a2dCenterQuarter # else: parent_t = base.a2dCenterThirdQuarter # if ncars == 1: parent_b = base.a2dBottomCenter # elif ncars == 2: # if self.player_idx == 0: parent_b = base.a2dBottomQuarter # else: parent_b = base.a2dBottomThirdQuarter # elif ncars == 3: # if self.player_idx == 0: parent_b = base.aspect2d # elif self.player_idx == 1: parent_b = base.a2dBottomQuarter # else: parent_b = base.a2dBottomThirdQuarter # elif ncars == 4: # if self.player_idx == 0: parent_b = base.a2dCenterQuarter # elif self.player_idx == 1: parent_b = base.a2dCenterThirdQuarter # elif self.player_idx == 2: parent_b = base.a2dBottomQuarter # else: parent_b = base.a2dBottomThirdQuarter yellow_scale = .065 if ncars == 1 else .042 white_scale = .05 if ncars == 1 else .038 damages_img_scale = (.12, 1, .12) if ncars == 1 else (.08, 1, .08) self.__weap_scale = .12 if ncars == 1 else .08 txt_x = -.24 if ncars == 1 else -.18 lab_x = -.3 if ncars == 1 else -.24 offset_z = .1 if ncars == 1 else .08 top_z = -.1 damages_txt_pos = (.3, .1) if ncars == 1 else (.24, .06) damages_img_pos = (.46, 1, .12) if ncars == 1 else (.36, 1, .07) weapon_txt_pos = (.18, -.08) if ncars == 1 else (.14, -.08) self.__weapon_img_pos = (.18, 1, -.24) if ncars == 1 else \ (.14, 1, -.18) fwd_img_pos = (0, 1, -.2) if ncars == 1 else (0, 1, -.16) fwd_img_scale = .15 if ncars == 1 else .12 pars = { 'scale': yellow_scale, 'parent': parent_tr, 'fg': menu_props.text_active_col, 'align': TextNode.A_left, 'font': self.eng.font_mgr.load_font(sprops.font) } # self.glass_tl = OnscreenImage( # 'assets/images/gui/topleft.txo', # scale=(.23, 1, .24), parent=parent_tl, pos=(.22, 1, -.23)) # self.glass_tl.set_transparency(True) # self.glass_tr = OnscreenImage( # 'assets/images/gui/topright.txo', # scale=(.36, 1, .36), parent=parent_tr, pos=(-.35, 1, -.35)) # self.glass_tr.set_transparency(True) # self.glass_t = OnscreenImage( # 'assets/images/gui/top.txo', # scale=(.24, 1, .22), parent=parent_t, pos=(0, 1, -.21)) # self.glass_t.set_transparency(True) # self.glass_bl = OnscreenImage( # 'assets/images/gui/bottomleft.txo', # scale=(.36, 1, .16), parent=parent_bl, pos=(.35, 1, .15)) # self.glass_bl.set_transparency(True) # self.glass_br = OnscreenImage( # 'assets/images/gui/bottomright.txo', scale=(.26, 1, .26), # parent=base.a2dBottomRight, pos=(-.25, 1, .25)) # self.glass_br.set_transparency(True) # self.glass_b = OnscreenImage( # 'assets/images/gui/bottom.txo', # scale=(1.02, 1, .26), parent=parent_b, pos=(0, 1, .25)) # self.glass_b.set_transparency(True) # self.glass_tl.hide() # self.glass_t.hide() # self.glass_b.hide() self.speed_txt = OnscreenText(pos=(txt_x + .06, top_z), **pars) self.speed_txt['align'] = TextNode.A_center self.speed_c = Circle(size=.1, pos=(txt_x + .06, top_z), parent=parent_tr, ray=.4, thickness=.05, col_start=(.9, .6, .1, 1), col_end=(.2, .8, .2, 1)) lap_str = '1/' + str(self.car_props.race_props.laps) self.lap_txt = OnscreenText(text=lap_str, pos=(txt_x, top_z - offset_z), **pars) self.time_txt = OnscreenText(pos=(txt_x, top_z - offset_z * 4), **pars) self.best_txt = OnscreenText(pos=(txt_x, top_z - offset_z * 5), **pars) self.ranking_txt = OnscreenText(pos=(txt_x, top_z - offset_z * 2), **pars) self.damages_img = OnscreenImage('assets/images/gui/car_icon.txo', scale=damages_img_scale, parent=parent_bl, pos=damages_img_pos) self.damages_img.set_transparency(True) self.damages_img.set_color_scale(menu_props.text_normal_col) self.damages_img.set_r(90) pars = { 'scale': white_scale, 'parent': pars['parent'], 'fg': menu_props.text_normal_col, 'align': TextNode.A_right, 'font': pars['font'] } self.speed_lab = OnscreenText(_('speed:'), pos=(lab_x, top_z), **pars) self.lap_lab = OnscreenText(text=_('lap:'), pos=(lab_x, top_z - offset_z), **pars) self.time_lab = OnscreenText(_('time:'), pos=(lab_x, top_z - offset_z * 4), **pars) self.best_lab = OnscreenText(_('best lap:'), pos=(lab_x, top_z - offset_z * 5), **pars) self.ranking_lab = OnscreenText(_('ranking:'), pos=(lab_x, top_z - offset_z * 2), **pars) self.damages_lab = OnscreenText(_('damages:'), pos=damages_txt_pos, **pars) self.damages_lab.reparent_to(parent_bl) self.weapon_lab = OnscreenText(_('weapon'), pos=weapon_txt_pos, scale=white_scale, parent=parent_tl, fg=menu_props.text_normal_col, font=self.eng.font_mgr.load_font( sprops.font)) self.weapon_img = None if ncars == 1: parent = base.a2dTopCenter elif ncars == 2: if player_idx == 0: parent = base.a2dTopQuarter else: parent = base.a2dTopThirdQuarter elif ncars == 3: if player_idx == 0: parent = base.a2dTopCenter elif player_idx == 0: parent = base.a2dCenterQuarter else: parent = base.a2dCenterThirdQuarter elif ncars == 4: if player_idx == 0: parent = base.a2dTopQuarter elif player_idx == 1: parent = base.a2dTopThirdQuarter elif player_idx == 2: parent = base.a2dCenterQuarter else: parent = base.a2dCenterThirdQuarter self.forward_img = OnscreenImage('assets/images/gui/direction.txo', scale=fwd_img_scale, parent=parent, pos=fwd_img_pos) self.forward_img.set_transparency(True) self.forward_img.hide() @staticmethod def __close_vec(vec1, vec2): return all(abs(b - a) < .01 for a, b in zip(vec1, vec2)) def enter_waiting(self): pass # if self.ncars == 1: parent = base.aspect2d # elif self.ncars == 2: # if self.player_idx == 0: parent = base.a2dCenterQuarter # else: parent = base.a2dCenterThirdQuarter # elif self.ncars == 3: # if self.player_idx == 0: parent = base.a2dQuarterCenter # elif self.player_idx == 1: parent = base.a2dThirdQuarterQuarter # else: parent = base.a2dThirdQuarterThirdQuarter # elif self.ncars == 4: # if self.player_idx == 0: parent = base.a2dQuarterQuarter # elif self.player_idx == 1: parent = base.a2dQuarterThirdQuarter # elif self.player_idx == 2: parent = base.a2dThirdQuarterQuarter # else: parent = base.a2dThirdQuarterThirdQuarter # menu_props = self.race_props.season_props.gameprops.menu_props # pars = {'scale': .065, 'parent': parent, # 'fg': menu_props.text_normal_col, # 'font': self.eng.font_mgr.load_font( # self.race_props.season_props.font)} def exit_waiting(self): pass def set_weapon(self, wpn): # self.glass_tl.show() self.weapon_lab.show() ncars = len([ player for player in self._players if player.kind == Player.human ]) if ncars == 1: parent_tl = base.a2dTopLeft elif ncars == 2: if self.player_idx == 0: parent_tl = base.a2dTopLeft else: parent_tl = base.a2dTopCenter elif ncars == 3: if self.player_idx == 0: parent_tl = base.a2dTopLeft elif self.player_idx == 1: parent_tl = base.a2dLeftCenter else: parent_tl = base.aspect2d elif ncars == 4: if self.player_idx == 0: parent_tl = base.a2dTopLeft elif self.player_idx == 1: parent_tl = base.a2dTopCenter elif self.player_idx == 2: parent_tl = base.a2dLeftCenter else: parent_tl = base.aspect2d self.weapon_img = OnscreenImage('assets/images/weapons/%s.txo' % wpn, scale=self.__weap_scale, parent=parent_tl, pos=self.__weapon_img_pos) self.weapon_img.set_transparency(True) def unset_weapon(self): # self.glass_tl.hide() self.weapon_lab.hide() self.weapon_img.destroy() def show_forward(self): # self.glass_t.show() self.forward_img.show() def set_forward_angle(self, angle): curr_angle = self.forward_img.get_r() curr_incr = globalClock.getDt() * 30 if abs(curr_angle - angle) < curr_incr: tgt_val = angle else: sign = 1 if angle > curr_angle else -1 tgt_val = curr_angle + curr_incr * sign self.forward_img.set_r(tgt_val) def hide_forward(self): # self.glass_t.hide() self.forward_img.hide() def apply_damage(self, reset=False): col = self.car_props.race_props.season_props.gameprops.menu_props.text_normal_col if reset: self.damages_img.set_color_scale(col) else: yellow = (col[0], col[1] - .25, col[2] - .5, col[3]) if self.__close_vec(self.damages_img.get_color_scale(), col): self.damages_img.set_color_scale(yellow) elif self.__close_vec(self.damages_img.get_color_scale(), yellow): red = (col[0], col[1] - .5, col[2] - .5, col[3]) self.damages_img.set_color_scale(red) def hide(self): labels = [ self.speed_txt, self.speed_c, self.time_txt, self.lap_txt, self.best_txt, self.speed_lab, self.time_lab, self.lap_lab, self.best_lab, self.damages_img, self.damages_lab, self.ranking_txt, self.ranking_lab, self.weapon_lab, # self.glass_tl, self.glass_tr, self.glass_t, # self.glass_bl, self.glass_br, self.glass_b ] list(map(lambda wdg: wdg.hide(), labels)) if self.weapon_img and not self.weapon_img.is_empty(): self.weapon_img.hide() self.forward_img.hide() def destroy(self): labels = [ self.speed_txt, self.speed_c, self.time_txt, self.lap_txt, self.best_txt, self.speed_lab, self.time_lab, self.lap_lab, self.best_lab, self.damages_img, self.damages_lab, self.ranking_txt, self.ranking_lab, self.weapon_lab, # self.glass_tl, self.glass_tr, self.glass_t, # self.glass_bl, self.glass_br, self.glass_b ] list(map(lambda wdg: wdg.destroy(), labels)) if self.weapon_img and not self.weapon_img.is_empty(): self.weapon_img.destroy() self.forward_img.destroy()