achievement_complete.py (5031B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\achievement_system\client\ui\fanfare\achievement_complete.py 2 import trinity 3 import uthread2 4 from achievement_system.client.api.error import DefinitionNotFoundError 5 from achievement_system.client.api.repository import get_repository 6 from carbon.client.script.environment.AudioUtil import PlaySound 7 from carbonui import Align, TextColor, uiconst 8 from carbonui.primitives.gradientSprite import GradientSprite 9 from carbonui.text.styles import TextHeadline 10 from carbonui.primitives.container import Container 11 from carbonui.primitives.sprite import StreamingVideoSprite 12 from carbonui.uianimations import animations 13 from eve.client.script.ui import eveColor 14 from eve.client.script.ui.heronotification.golden import GoldenPositionContainerAutoSize 15 from localization import GetByLabel 16 17 def achievement_complete_hero_notification(parent, achievement_id): 18 try: 19 name_text = get_repository().definitions.get_achievement(achievement_id).name_message.get_localized_text() 20 except DefinitionNotFoundError: 21 return 22 23 PlaySound('achievement_take1_play') 24 video_width = 152 25 video_height = 100 26 fade_out_delay = 4.5 27 text_separation = 15 28 title_text = GetByLabel('UI/Achievements/Fanfare/AchievementCompletedTitle') 29 title_w, title_h = TextHeadline.MeasureTextSize(title_text, maxLines=1) 30 name_w, name_h = TextHeadline.MeasureTextSize(name_text, maxLines=1) 31 max_text_width = max(title_w, name_w) 32 video_padding = 20 if session.solarsystemid else 60 33 video_offset_start = video_width * 0.5 34 video_offset_end = video_offset_start + max_text_width * 0.5 + video_padding 35 container = GoldenPositionContainerAutoSize(parent=parent, alignMode=Align.CENTER, state=uiconst.UI_DISABLED) 36 video_left = StreamingVideoSprite(parent=container, align=Align.CENTER, videoPath='res:/video/achievements/fanfare_side.webm', spriteEffect=trinity.TR2_SFX_COPY, blendMode=trinity.TR2_SBM_ADD, pos=(-video_offset_start, 37 0, 38 video_width, 39 video_height), opacity=0.0) 40 video_right = StreamingVideoSprite(parent=container, align=Align.CENTER, videoPath='res:/video/achievements/fanfare_side.webm', spriteEffect=trinity.TR2_SFX_COPY, blendMode=trinity.TR2_SBM_ADD, pos=(video_offset_start, 41 0, 42 -video_width, 43 video_height), opacity=0.0) 44 title_container = Container(parent=container, align=Align.CENTER, clipChildren=True, height=video_height, width=0) 45 name_container = Container(parent=container, align=Align.CENTER, height=video_height, width=max_text_width, opacity=0) 46 gradient = GradientSprite(parent=container, align=uiconst.CENTER, rgbData=((0.0, eveColor.BLACK[:3]), (1.0, eveColor.BLACK[:3])), alphaData=((0.0, 0.0), 47 (0.2, 0.6), 48 (0.8, 0.6), 49 (1.0, 0.0)), width=0, height=video_height - 16) 50 51 def play_video(): 52 video_left.Play() 53 video_right.Play() 54 animations.FadeIn(video_left, duration=0.75) 55 animations.FadeIn(video_right, duration=0.75) 56 animations.MorphScalar(obj=video_left, attrName='left', startVal=video_left.left, endVal=-video_offset_end, duration=0.5, timeOffset=0.75, callback=on_left_video_move_complete) 57 animations.MorphScalar(obj=video_right, attrName='left', startVal=video_right.left, endVal=video_offset_end, duration=0.5, timeOffset=0.75, callback=on_right_video_move_complete) 58 59 def on_left_video_move_complete(): 60 animations.FadeOut(video_left, duration=0.5, timeOffset=2.5) 61 62 def on_right_video_move_complete(): 63 animations.FadeOut(video_right, duration=0.5, timeOffset=2.5) 64 65 def show_title(): 66 TextHeadline(parent=title_container, align=Align.CENTER, text=title_text, color=TextColor.HIGHLIGHT, maxLines=1) 67 animations.MorphScalar(obj=title_container, attrName='width', startVal=title_container.width, endVal=max_text_width, duration=0.5, timeOffset=0.75) 68 animations.MorphScalar(obj=title_container, attrName='top', startVal=title_container.top, endVal=-text_separation, duration=0.35, timeOffset=1.6) 69 animations.FadeOut(title_container, duration=0.5, timeOffset=4.0) 70 animations.MorphScalar(obj=gradient, attrName='width', startVal=gradient.width, endVal=max_text_width + video_width, duration=0.5, timeOffset=0.75) 71 animations.FadeOut(gradient, duration=0.5, timeOffset=4.0) 72 73 def show_name(): 74 TextHeadline(parent=name_container, align=Align.CENTER, text=name_text, color=TextColor.SECONDARY, maxLines=1, top=text_separation) 75 animations.FadeIn(name_container, duration=0.5, timeOffset=1.6, callback=on_name_fade_in_complete) 76 uthread2.sleep(fade_out_delay) 77 78 def on_name_fade_in_complete(): 79 animations.FadeOut(name_container, duration=0.5, timeOffset=1.9) 80 81 video_thread = uthread2.start_tasklet(play_video) 82 title_thread = uthread2.start_tasklet(show_title) 83 name_thread = uthread2.start_tasklet(show_name) 84 video_thread.get() 85 title_thread.get() 86 name_thread.get()