#==============================================================================
# ■ [Sprite Custom Weather] 精灵增强-粒子天气 v1.0 by SailCat
# /req [Sprite] 精灵增强系统核心 v1.0
#------------------------------------------------------------------------------
# 方法:本脚本插入到Main之前使用
# 依赖:精灵增强系统核心
# 版本:v1.0 (Build 211202)
# 效果:
# 1. 可以自定义天气的强度(可超过事件系统1-9的范围)
# 2. 可以自定义天气的种类(共8种,不限于系统默认的晴风雨雪)
# 3. 动画天气效果(警告:过度使用可能会有性能损失)
# 4. 利用天气引擎实现粒子动画效果(可以和天气同屏渲染,注意性能)
# 配置:天气强度上限、八种默认天气的粒子行为参数、天气粒子色彩、屏显范围
# 冲突:无
# 说明:
# 1. 自定义天气使用插件命令实现,具体为:
# cmd_custom_weather(天气种类, 强度表, 延迟帧[, 自定义图片表[, 动画表]])
# 其中最后两个参数可选
# a) 天气种类为任意0-255的数值,也可写作字符串,具体如下
# 数值 字符串 含义 数值 字符串 含义
# 1 rain 下雨 16 sand 扬沙
# 2 storm 刮风 32 hail 冰雹
# 4 snow 下雪 64 sleet 冻雨
# 8 dust 浮尘 128 petal 花雨
# 若要多种天气同屏显示,可用数值的和表示,或用逗号隔开多个天气
# 如 5 表示 雨夹雪 的天气,也可写成 "rain,snow"
# 如 146 表示 风吹沙起花落 的天气,也可写成 "storm,petal,sand"
# 写作 0 表示没有天气,也可以用事件“天气设置”为“无”来关掉天气
# b) 强度表可以只写一个数字,表示指定的天气种类统一设为该强度
# 也可以写成数组形式,表示按天气种类的顺序分别指定强度
# 若天气种类用数值表示,则按数字从小到大的顺序指定
# 若天气种类用字符串表示,则按字符串中的顺序指定
# 天气强度的数值设为1-9与事件系统“天气设置”相同,10以上为扩展强度
# c) 延迟帧的含义和事件系统的“天气设置”相同,即在X帧之后渐变达到强度
# d) 自定义图片表为字符串数组形式(若只有1个天气元素可省略数组)
# 与指定的天气种类逐一对应,用以代替系统默认的天气粒子图片
# e) 动画表为动画ID的数组形式(若只有1个天气元素可省略数组)
# 与指定的天气种类逐一对应,表示在这些天气粒子上同时播放对应ID的动画
# (注:由于XP内建支持雾图形功能,多云、阴、沙尘暴、雾、霾等强阴影天气,
# 建议使用雾图形功能实现)
# 2. 粒子动画使用插件命令实现,具体为:
# cmd_particle_setup(发射器编号, 粒子元件名, 发射器设置, 粒子设置, 强度)
# a) 发射器编号为1-8的值,是控制发射器的凭据,对同一个发射器的反复设置会
# 覆盖前一次的设置,其逻辑类似于显示图片
# 可以在设置中更改最大并发数,注意性能问题
# b) 粒子元件名即粒子的元件图片名称,要放在Graphics/Pictures文件夹中
# c) 发射器设置为一个长度为3的数组:[粒子再生率, 关键帧表, 缓动类型]
# 粒子再生率是一个自然数,表示发射器每帧最多可增加或减少该数目的粒子
# 关键帧表是粒子发射器的移动位置变化表,以{帧数=>Rect}的hash形式表示
# 每一帧的Rect表示粒子发射器在这一帧可生成粒子的范围区域
# 缓动类型是粒子发射器在两个相邻关键帧间的移动补间方式,用字符串表示
# "linear": 表示粒子发射器在两个关键帧之间线性补间处理(默认)
# "static": 表示粒子发射器在两个关键帧之间不进行补间处理
# "smooth": 表示粒子发射器在两个关键帧之间平滑补间处理
# "slow": 表示粒子发射器在两个关键帧之间慢速补间处理(比smooth平滑)
# "hasty": 表示粒子发射器在两个关键帧之间急动补间处理
# "fast": 表示粒子发射器在两个关键帧之间快速补间处理(比hasty急动)
# "circular": 表示粒子发射器在两个关键帧之间圆性补间处理
# "axial": 表示粒子发射器在两个关键帧之间轴性补间处理
# d) 粒子设置是一个长度为10的数组,可任选以下两种方式之一表示:
# i. [0, 水平初速, 垂直初速, 淡出, 水平加速, 垂直加速, 动力, 自旋,
# 放大率, 放大加速]
# ii.[1, 移向, 移速, 淡出, 转向, 加速, 动力, 自旋, 放大率, 放大加速]
# 具体效果可以参考脚本配置区中默认天气粒子的设置
# e) 强度和天气设置相同,强度1同时发射8个粒子,强度每+1,同时发射粒子+4
# 3. 粒子动画的实时控制用插件命令实现,具体为:
# cmd_particle_control(发射器编号, 命令[, 参数])
# 发射器编号就是生成粒子动画时指定的编号
# 命令为以下五个字符串之一:
# "change": 更改粒子动画的元件名为参数指定的新文件名
# "max": 更改粒子动画的强度上限为新的参数指定的值,发射器将缓缓再生粒子
# "fade": 无参数,阻止发射器中粒子的再生行为,所有粒子消失后,消除发射器
# "kill": 无参数,立即停止粒子动画,清除一切粒子,并消除发射器
# "proc": 参数指定一个Proc,更改发射器的粒子清除判定规则
# 默认规则为粒子进入画面无效区域,或者粒子淡出到指定透明度以下
# 4. 本插件改变了在事件中连续设定天气的解释逻辑,每当设定一个延迟帧不为0的
# 天气(包括用事件指令和插件命令设定时),如果此时已经有天气变化的预约调
# 用,不会覆盖调用天气变化,而是追加为排队的调用。
# 如果确需覆盖调用,可插入一个延迟帧为0的天气指令,这会清空预约队列。
#==============================================================================