| 
UID3积分8169帖子259主题68论坛币5016 威望54 EP值2533 MP值20 阅读权限200注册时间2011-8-3在线时间1097 小时最后登录2022-10-8
 
   
 | 
| 預覽:http://pan.baidu.com/s/1hqqY9CC#dir/path=%2FSaiyakuFX_Preview 复制代码from tcaxPy import *
from extLibs.XXParticleSystem import *
from util.cairo import *
from util.gdiFont import *
def tcaxPy_Init():
 
    global _Fs
 
    global _FD                  # 一帧的持续时间, 约40毫秒
 
    global _Spacing         # 字体间距
 
    global Font                 # 首要字体
    global GdiFont
 
    _Fs = GetVal(val_FontSize)
 
    _FD = 1000 / GetVal(val_FXFPS)
 
    _FontFileName = GetVal(val_FontFileName)
 
    _FaceID = GetVal(val_FaceID)
 
    _Spacing = GetVal(val_Spacing)
 
    Font = InitFont(_FontFileName, _FaceID, _Fs, _Spacing, GetVal(val_SpaceScale), MakeRGB(255, 255, 255), 0, False)
    GdiFont = gfInitFont(GetVal(val_FontFaceName), _Fs, GetVal(val_Spacing), GetVal(val_SpaceScale), 0, False)   #GDIfont
    
    # cairo
 
    global ctx
 
    fx_width = GetVal(val_ResolutionX)
 
    fx_height = GetVal(val_ResolutionY)
 
    surface = ImageSurface(FORMAT_ARGB32, fx_width, fx_height)
 
    ctx = Context(surface)
 
def tcaxPy_Fin():
    FinFont(Font)
    gfFinFont(GdiFont)   #GDIfont
def tcaxPy_Main(_i, _j, _n, _BT, _ET, _SK, _KT, _X, _Y, _A, _TXT):
    ASS_BUF  = []                # 保存ASS特效
    TCAS_BUF = []                # 保存TCAS特效
    if _i < 8:
        if _i < 2 or _i == 7:
            C1 = "FF0000"
        else:
            C1 = "3CFFF8"
        size = 100
        n = 40
        x = 40
        for i in range(0,_KT,n):
            rand1 = randint(-20,20)
            rand2 = randint(-20,20)
            for j in range(2):
                ass_main(ASS_BUF,SubL(_BT+_SK-5+i+j*x,_BT+_SK+100+i+j*x),an(7)+pos(_X+0.5*randint(-1,1)+rand1,_Y+0.5*randint(-1,1)-rand2)+xshad(1)+be(1)+bord(2.5)+color3("D4FEFC")+alpha1(250)+color1(C1)+fscx(0)+fscy(0)+t(fsc(size,size))+fad(100,1000),"{\p2}m 59 0 b 59 -79 -59 -79 -59 0 -59 79 59 79 59 0{\p0}")
                ass_main(ASS_BUF,SubL(_BT+_SK-3+i+j*x,_BT+_SK+102+i+j*x),an(7)+pos(_X+0.5*randint(-1,1)-rand2,_Y+0.5*randint(-1,1)+rand1)+yshad(1)+be(1)+bord(2.5)+color3("D4FEFC")+alpha1(250)+color1(C1)+fscx(0)+fscy(0)+t(fsc(size,size))+fad(100,1000),"{\p2}m 59 0 b 59 -79 -59 -79 -59 0 -59 79 59 79 59 0{\p0}")
        dx = _X - int(_A / 2 + 0.5)
        dy = _Y - int(_Fs / 2 + 0.5)
        frames = int(1500 / _FD + 0.5)
        randx = randint(50,80)
        randy = randint(-50,50)
        for i in range(frames):
 
            ts = _BT+_SK-5 + i * _FD / 10
 
            te = _BT+_SK-5 + (i + 1) * _FD / 10
 
            frame_pct = i / frames
            outline = gfGetOutline(GdiFont, _TXT, dx, dy)
            AssDraw(ctx, outline)
            path_trans(ctx, wave_filter,(_X,_Y,frame_pct))
 
            text = ToAssDraw(ctx)
 
            EFT = an(7) + pos(0,0) + alpha1(255 * frame_pct)+alpha3(155 * frame_pct+100) +bord(1.5)+ p(4)
 
            ass_main(ASS_BUF, SubL(ts, te), EFT, text)
        outline = gfGetOutline(GdiFont, _TXT, dx, dy)
        ass_main(ASS_BUF, SubL(_BT+_j*5, _BT+_SK-5),an(7) + pos(0,0)+fad(150,0)+bord(1.5)+p(4), outline)
    else:
        dx = _X - int(_A / 2 + 0.5)
        dy = _Y - int(_Fs / 2 + 0.5)
        frames = int(1000 / _FD + 0.5)
        randx = randint(50,80)
        randy = randint(30,80)
        rx = randint(-90,90)
        ry = randint(-90,90)
        rz = randint(0,180)
        POS = Bezier3(frames,0 , 0 , -randx, -randy,-randint(0,int(randx/2)), randint(-50,50),-randint(int(randx/2),randx), randint(-50,50))
        for i in range(frames):
 
            ts = _BT+_SK-5 + i * _FD / 10
 
            te = _BT+_SK-5 + (i + 1) * _FD / 10
 
            frame_pct = i / frames
            outline = gfGetOutline(GdiFont, _TXT, dx, dy)
            AssDraw(ctx, outline)
            path_trans(ctx, flag_filter, (dx+POS[i][0]*frame_pct, dx, randx/2.5, _Fs, frame_pct))
 
            text = ToAssDraw(ctx)
 
            EFT = an(7) + pos(POS[i][0]*frame_pct,POS[i][1]*frame_pct)+ alpha1(255 * frame_pct)+alpha3(155 * frame_pct+100) +bord(1.5)+ p(4)
            ass_main(ASS_BUF, SubL(ts, te), EFT, text)
        outline = gfGetOutline(GdiFont, _TXT, dx, dy)
        ass_main(ASS_BUF, SubL(_BT+_j*5, _BT+_SK-5),an(7) + pos(0,0)+fad(150,0)+bord(1.5)+p(4), outline)
    return (ASS_BUF,None)
def wave_filter(x, y, param):
 
    dx, dy, frame_pct = param
 
    d = sqrt((x-dx*8)**2+(y-dy*8)**2)
    if d==0:
        max_diff_x = sin(  pi / 10 + frame_pct * pi * 5) * 3 * 8
        max_diff_y = cos(  pi / 10 + frame_pct * pi * 5) * 3 * 8
    else:
        max_diff_x = sin( (y-dy)/d * pi / 10 + frame_pct * pi * 5) * 3 * 8
        max_diff_y = cos( (x-dx)/d * pi / 10 + frame_pct * pi * 5) * 3 * 8        
 
    new_x = x + floor(frame_pct * max_diff_x)
 
    new_y = y + floor(frame_pct * max_diff_y)
    return new_x, new_y
def flag_filter(x, y, param):
 
    char_left, line_left, line_width, line_height, frame_pct = param
 
    char_x = ceil(x + char_left * 8 - line_left * 8)
 
    max_diff_x = sin(y / line_height * pi / 10 + frame_pct * pi * 5) * 20 * 8
 
    max_diff_y = sin(char_x / line_width * pi / 10 + frame_pct * pi * 5) * 20 * 8
 
    new_x = char_x + floor(max_diff_y * frame_pct)
 
    new_y = y + floor(max_diff_y * frame_pct)
 
    return new_x, new_y
 | 
 
1
查看全部评分
 |