钟形冷却动画——draw_rectangle_cd

脚本说明

这是一个用于绘制钟形冷却动画蒙版的脚本,脚本的实际效果如下图中右侧所示
[]
你可以传入两个点的坐标值,分别是一个矩形的左上角和右下角,然后传入冷却的进度(0-1之间的一个值),该脚本会首先绘制一个覆盖全矩形的蒙版然后根据冷却进度值的变化去逐渐绘制动画效果。

参数说明

参数序号 参数名 参数说明
argument0 x1 左上角的x坐标
argument1 y1 左上角的y坐标
argument2 x2 右下角的x坐标
argument3 y2 右下角的y坐标
argument4 value 冷却进度(0-1之间)

代码正文

/// draw_rectangle_cd(x1, y1, x2, y2, value)
///@param x1
///@param y1
///@param x2
///@param y2
///@param value

var v, x1, y1, x2, y2, xm, ym, vd, vx, vy, vl;
v = argument4
if (v <= 0) return 0 // nothing to be drawn
x1 = argument0; y1 = argument1; // top-left corner
x2 = argument2; y2 = argument3; // bottom-right corner
if (v >= 1) return draw_rectangle(x1, y1, x2, y2, false) // entirely filled
xm = (x1 + x2) / 2; ym = (y1 + y2) / 2; // middle point
draw_primitive_begin(pr_trianglefan)
draw_vertex(xm, ym); draw_vertex(xm, y1)
// draw corners:
if (v >= 0.125) draw_vertex(x2, y1)
if (v >= 0.375) draw_vertex(x2, y2)
if (v >= 0.625) draw_vertex(x1, y2)
if (v >= 0.875) draw_vertex(x1, y1)
// calculate angle & vector from value:
vd = pi * (v * 2 - 0.5)
vx = cos(vd)
vy = sin(vd)
// normalize the vector, so it hits -1+1 at either side:
vl = max(abs(vx), abs(vy))
if (vl < 1) {
    vx /= vl
    vy /= vl
}
draw_vertex(xm + vx * (x2 - x1) / 2, ym + vy * (y2 - y1) / 2)
draw_primitive_end()
2018-01-11 16:16
Comments
Write a Comment