def draw(self, surf, gameStateObj): currentTime = Engine.get_time() # if should be displaying exp bar OR should be displaying level Up screen if self.state.getState() in [ 'exp_wait', 'exp_leave', 'exp0', 'exp100', 'init', 'prepare_promote' ]: if self.exp_bar: self.exp_bar.draw(surf) elif self.state.getState() == 'levelUp': self.levelUpAnimation.draw(surf, gameStateObj) """ marker1 = self.animationMarker[0] marker2 = self.animationMarker[1] LvlSurf = Engine.subsurface(self.levelUpAnimation, (marker2*78, marker1*16, 78, 16)) x, y = self.unit.position topleft = (x-gameStateObj.cameraOffset.x-2)*GC.TILEWIDTH, (y-gameStateObj.cameraOffset.y-1)*GC.TILEHEIGHT surf.blit(LvlSurf, topleft) """ elif self.state.getState() == 'levelScreen': # Highlight underline -- yellow, blue new_color = Image_Modification.color_transition2((88, 16, -40), (-80, -32, 40)) # Scroll out if currentTime - self.state_time > self.LEVELUPWAIT + ( self.get_num_sparks() + 1) * self.SPARKTIME + 300: self.unit_scroll_offset += 10 self.screen_scroll_offset += 20 self.animations = [] else: # scroll in if self.unit_scroll_offset: self.lastSparkUpdate = currentTime - 300 # add 300 extra milliseconds of waiting at beginning self.unit_scroll_offset -= 10 self.unit_scroll_offset = max(0, self.unit_scroll_offset) self.screen_scroll_offset -= 20 self.screen_scroll_offset = max(0, self.screen_scroll_offset) DisplayWidth = self.levelUpScreen.get_width() DisplayHeight = self.levelUpScreen.get_height() # Level up screen LevelUpSurface = Engine.create_surface( (DisplayWidth, DisplayHeight), transparent=True, convert=True) # Create background LevelSurf = self.levelUpScreen LevelUpSurface.blit(LevelSurf, (0, 0)) # Render top banner text long_name = gameStateObj.metaDataObj['class_dict'][ self.unit.klass]['long_name'] GC.FONT['text_white'].blit(long_name, LevelUpSurface, (12, 3)) GC.FONT['text_yellow'].blit( cf.WORDS['Lv'], LevelUpSurface, (LevelUpSurface.get_width() / 2 + 12, 3)) if self.first_spark_flag or self.force_level: level = str(self.unit.level) elif self.unit.level == 1: level = str(self.prev_level) else: level = str(self.unit.level - 1) GC.FONT['text_blue'].blit(level, LevelUpSurface, (LevelUpSurface.get_width() / 2 + 50 - GC.FONT['text_blue'].size(level)[0], 3)) # Blit first spark if self.force_level and not self.first_spark_flag: self.first_spark_flag = True self.lastSparkUpdate = currentTime elif self.screen_scroll_offset == 0 and not self.first_spark_flag and currentTime - self.lastSparkUpdate > self.SPARKTIME + 500: position = (87, 27) spark_animation = CustomObjects.Animation(self.statupanimation, position, (11, 1), animation_speed=32, ignore_map=True) self.animations.append(spark_animation) self.first_spark_flag = True self.lastSparkUpdate = currentTime # Sound GC.SOUNDDICT['Level_Up_Level'].play() # Add sparks to animation list one at a time if self.first_spark_flag and currentTime - self.lastSparkUpdate > self.SPARKTIME: self.sparkCounter += 1 self.sparkUp = True # Whether the sparkCounter was actually incremented or not if self.sparkCounter > 7: self.sparkCounter = 7 self.sparkUp = False else: while self.levelup_list[self.sparkCounter] == 0: self.sparkCounter += 1 self.sparkUp = True if self.sparkCounter > 7: self.sparkCounter = 7 self.sparkUp = False break if self.sparkUp: self.underline_offset = 36 # for underline growing # Add animations and Sound # Animations if self.sparkCounter >= 4: position = (88, (self.sparkCounter - 4) * GC.TILEHEIGHT + 61) else: position = (24, self.sparkCounter * GC.TILEHEIGHT + 61) arrow_animation = CustomObjects.Animation( self.uparrow, (position[0] + 31, position[1] - 37), (10, 1), animation_speed=32, ignore_map=True, hold=True) self.arrow_animations.append(arrow_animation) spark_animation = CustomObjects.Animation( self.statupanimation, position, (11, 1), animation_speed=32, ignore_map=True) self.animations.append(spark_animation) # Only 1-7 are supported increases for a levelup right now # assert 8 > self.levelup_list[self.sparkCounter] > 0, "%s %s"%(self.levelup_list, self.levelup_list[self.sparkCounter]) if 1 <= self.levelup_list[self.sparkCounter] <= 4: row = Engine.subsurface( self.numbers, (0, (self.levelup_list[self.sparkCounter] - 1) * 24, 10 * 28, 24)) number_animation = CustomObjects.Animation( row, (position[0] + 29, position[1] + 23), (10, 1), animation_speed=32, ignore_map=True, hold=True) else: row = Engine.subsurface( self.numbers, (0, (Utility.clamp( self.levelup_list[self.sparkCounter], 1, 7) - 1) * 24, 2 * 28, 24)) number_animation = CustomObjects.Animation( row, (position[0] + 29, position[1] + 23), (2, 1), animation_speed=32, ignore_map=True, hold=True) number_animation.frameCount = -5 # delay this animation for 5 frames self.animations.append(number_animation) # Sound GC.SOUNDDICT['Stat Up'].play() self.lastSparkUpdate = currentTime # Reset the last update time. # HP, Str, Mag, Skl, Spd, Luck, Def, Res new_underline_surf = Image_Modification.change_image_color( self.statunderline, new_color) for num in range(len(self.levelup_list[0:self.sparkCounter + 1])): if self.levelup_list[ num] > 0: # IE it should be updated, since it leveled up if num == self.sparkCounter: rect = (self.underline_offset, 0, new_underline_surf.get_width() - self.underline_offset, 3) new_underline_surf = Engine.subsurface( new_underline_surf, rect) self.underline_offset -= 6 self.underline_offset = max(0, self.underline_offset) if num >= 4: topleft = (76 + self.underline_offset // 2, 45 + GC.TILEHEIGHT * (num - 4)) else: topleft = (12 + self.underline_offset // 2, 45 + GC.TILEHEIGHT * (num)) else: if num >= 4: topleft = (76, 45 + GC.TILEHEIGHT * (num - 4)) else: topleft = (12, 45 + GC.TILEHEIGHT * (num)) LevelUpSurface.blit(new_underline_surf, topleft) # Update and draw arrow animations self.arrow_animations = [ animation for animation in self.arrow_animations if not animation.update(gameStateObj) ] for animation in self.arrow_animations: animation.draw(LevelUpSurface, gameStateObj, blend=new_color) # Update and draw number animations self.number_animations = [ animation for animation in self.number_animations if not animation.update(gameStateObj) ] for animation in self.number_animations: animation.draw(LevelUpSurface, gameStateObj, blend=new_color) GC.FONT['text_yellow'].blit('HP', LevelUpSurface, (10, 35)) GC.FONT['text_yellow'].blit(cf.WORDS['STR'], LevelUpSurface, (10, GC.TILEHEIGHT + 35)) GC.FONT['text_yellow'].blit(cf.WORDS['MAG'], LevelUpSurface, (10, GC.TILEHEIGHT * 2 + 35)) GC.FONT['text_yellow'].blit(cf.WORDS['SKL'], LevelUpSurface, (10, GC.TILEHEIGHT * 3 + 35)) GC.FONT['text_yellow'].blit( cf.WORDS['SPD'], LevelUpSurface, (LevelUpSurface.get_width() / 2 + 8, 35)) GC.FONT['text_yellow'].blit( cf.WORDS['LCK'], LevelUpSurface, (LevelUpSurface.get_width() / 2 + 8, GC.TILEHEIGHT + 35)) GC.FONT['text_yellow'].blit( cf.WORDS['DEF'], LevelUpSurface, (LevelUpSurface.get_width() / 2 + 8, GC.TILEHEIGHT * 2 + 35)) GC.FONT['text_yellow'].blit( cf.WORDS['RES'], LevelUpSurface, (LevelUpSurface.get_width() / 2 + 8, GC.TILEHEIGHT * 3 + 35)) hp_text = self.unit.stats['HP'].base_stat - ( self.levelup_list[0] if self.sparkCounter < 0 else 0) str_text = self.unit.stats['STR'].base_stat - ( self.levelup_list[1] if self.sparkCounter < 1 else 0) mag_text = self.unit.stats['MAG'].base_stat - ( self.levelup_list[2] if self.sparkCounter < 2 else 0) skl_text = self.unit.stats['SKL'].base_stat - ( self.levelup_list[3] if self.sparkCounter < 3 else 0) spd_text = self.unit.stats['SPD'].base_stat - ( self.levelup_list[4] if self.sparkCounter < 4 else 0) lck_text = self.unit.stats['LCK'].base_stat - ( self.levelup_list[5] if self.sparkCounter < 5 else 0) def_text = self.unit.stats['DEF'].base_stat - ( self.levelup_list[6] if self.sparkCounter < 6 else 0) res_text = self.unit.stats['RES'].base_stat - ( self.levelup_list[7] if self.sparkCounter < 7 else 0) GC.FONT['text_blue'].blit( str(hp_text), LevelUpSurface, (50 - GC.FONT['text_blue'].size(str(hp_text))[0], 35)) GC.FONT['text_blue'].blit( str(str_text), LevelUpSurface, (50 - GC.FONT['text_blue'].size(str(str_text))[0], GC.TILEHEIGHT + 35)) GC.FONT['text_blue'].blit( str(mag_text), LevelUpSurface, (50 - GC.FONT['text_blue'].size(str(mag_text))[0], GC.TILEHEIGHT * 2 + 35)) GC.FONT['text_blue'].blit( str(skl_text), LevelUpSurface, (50 - GC.FONT['text_blue'].size(str(skl_text))[0], GC.TILEHEIGHT * 3 + 35)) GC.FONT['text_blue'].blit( str(spd_text), LevelUpSurface, (LevelUpSurface.get_width() / 2 + 48 - GC.FONT['text_blue'].size(str(spd_text))[0], 35)) GC.FONT['text_blue'].blit( str(lck_text), LevelUpSurface, (LevelUpSurface.get_width() / 2 + 48 - GC.FONT['text_blue'].size(str(lck_text))[0], GC.TILEHEIGHT + 35)) GC.FONT['text_blue'].blit( str(def_text), LevelUpSurface, (LevelUpSurface.get_width() / 2 + 48 - GC.FONT['text_blue'].size(str(def_text))[0], GC.TILEHEIGHT * 2 + 35)) GC.FONT['text_blue'].blit( str(res_text), LevelUpSurface, (LevelUpSurface.get_width() / 2 + 48 - GC.FONT['text_blue'].size(str(res_text))[0], GC.TILEHEIGHT * 3 + 35)) """ # HP, Str, Mag, Skl, Spd, Luck, Def, Res for num in range(len(self.levelup_list[0:self.sparkCounter])): if self.levelup_list[num] != 0: # IE it should be updated, since it leveled up # Blit number if num >= 4: topleft = (LevelUpSurface.get_width()/2+50, GC.TILEHEIGHT * (num - 4) + 33) else: topleft = (52, GC.TILEHEIGHT * num + 33) change = str(self.levelup_list[num]) if self.levelup_list[num] > 0: change = '+' + change GC.FONT['stat_white'].blit(change, LevelUpSurface, topleft) """ pos = (6 - self.screen_scroll_offset, GC.WINHEIGHT - 8 - LevelUpSurface.get_height()) surf.blit(LevelUpSurface, pos) # Blit unit's pic BigPortraitSurf = self.unit.bigportrait pos = (GC.WINWIDTH - BigPortraitSurf.get_width() - 4, GC.WINHEIGHT + self.unit_scroll_offset - BigPortraitSurf.get_height()) surf.blit(BigPortraitSurf, pos) # Update and draw animations self.animations = [ animation for animation in self.animations if not animation.update(gameStateObj) ] for animation in self.animations: animation.draw(surf, gameStateObj)