NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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()