SoGradientTextTagToUnit

SoGradientSetFadeTime
编写完成
pigeon/gradient
soul2 3 years ago
parent e3f3e64a61
commit 3b7b3bcb2a
  1. 207
      jass/So/Pigeon/GradientTextTag.j
  2. 66
      jass/So/SoBase.j
  3. 3
      jass/So/SoPigeon.cfg
  4. 18
      jass/So/SoPigeon.j
  5. 1
      jass/So/SoSimplify.cfg
  6. 44
      jass/So/SoSimplify.j
  7. 3
      jass/SoBase.cfg
  8. 10
      jass/SoBase.j
  9. 1
      share/mpq/config
  10. 73
      share/mpq/so/action.txt
  11. 10
      share/mpq/so/call.txt
  12. 18
      share/mpq/so/define.txt
  13. 1
      share/mpq/so/event.txt

@ -0,0 +1,207 @@
/* 渐变漂浮文字 2.0
* 参数:文字, 单位, z轴偏移, 初始大小, 目标大小, 变化模式, 变化间隔, 变化频率, 颜色值R, G, B, 透明度, 速度, 方向, 消失时间
*/
globals
// 模式:没有变化
// 该模式下漂浮文字大小为初始大小
constant integer gradient_type_none = 0
// 模式:变大
constant integer gradient_type_toBigger = 1
// 模式:变小
constant integer gradient_type_toSmaller = 2
// 模式:先变大再变小
constant integer gradient_type_toBiggerAndSmaller = 3
// 变化频率 10Hz
constant real gradient_frequency_10Hz = 0.1
// 变化频率 20Hz
constant real gradient_frequency_20Hz = 0.05
// 变化频率 25Hz
constant real gradient_frequency_25Hz = 0.04
// 变化频率 33Hz
constant real gradient_frequency_33Hz = 0.03
// 变化频率 50Hz
constant real gradient_frequency_50Hz = 0.02
// 变化频率 100Hz
constant real gradient_frequency_100Hz = 0.01
// 漂浮文字淡化时间(秒)
real gradient_fade_time = 1
// 用于返回的全局变量
private timer gradient_temp_timer
private texttag gradient_temp_texttag
endglobals
/* 使漂浮文字在到达目标时间后消失 */
private function ClearedTime takes texttag tt, real time returns nothing
call SetTextTagPermanent(tt, false)
call SetTextTagFadepoint(tt, (time - gradient_fade_time))
call SetTextTagLifespan(tt, time)
endfunction
/* 新建计时器存入 相关数据 */
private function InitGradientData takes texttag tt, string text, real beginSize, real targetSize, integer modeType, real intervals, real frequently, real speed, real angle, real clearedTime returns timer
local integer hid
set gradient_temp_timer = CreateTimer()
set hid = GetHandleId(gradient_temp_timer)
call SaveTextTagHandle(data, hid, 0, tt)
call SaveReal(data, hid, 1, beginSize)
call SaveReal(data, hid, 2, targetSize)
call SaveReal(data, hid, 3, intervals)
call SaveReal(data, hid, 4, frequently)
call SaveInteger(data, hid, 5, modeType)
call SaveStr(data, hid, 6, text)
call SaveReal(data, hid, 7, beginSize)
call SaveReal(data, hid, 8, speed)
call SaveReal(data, hid, 9, angle)
call SaveReal(data, hid, 10, clearedTime)
return gradient_temp_timer
endfunction
/* 合法性校验
* 变大模式下 目标大小须>初始大小
* 变小模式下 目标大小须<初始大小
* 先变大再变小模式下, 目标大小须>初始大小
*/
private function GradientCheckSize takes integer modeType, real beginSize, real targetSize returns boolean
if modeType == gradient_type_none then
return true
elseif modeType == gradient_type_toBigger or modeType == gradient_type_toBiggerAndSmaller then
return targetSize > beginSize
elseif modeType == gradient_type_toSmaller then
return beginSize > targetSize
endif
return false
endfunction
private function GradientRunBiggerToSmallerActions takes nothing returns nothing
// 读取数据
local timer t = GetExpiredTimer()
local integer hid = GetHandleId(t)
local texttag tt = LoadTextTagHandle(data, hid, 0)
local real nowSize = LoadReal(data, hid, 1)
local real targetSize = LoadReal(data, hid, 2)
local real intervals = LoadReal(data, hid, 3)
local real frequently = LoadReal(data, hid, 4)
local integer modeType = LoadInteger(data, hid, 5)
local string text = LoadStr(data, hid, 6)
local real beginSize = LoadReal(data, hid, 7)
local real speed = LoadReal(data, hid, 8)
local real angle = LoadReal(data, hid, 9)
local real clearedTime = LoadReal(data, hid, 10)
// 变化大小
call SetTextTagTextBJ(tt, text, (nowSize - intervals))
set nowSize = nowSize - intervals
// 如果大小超过了目标值则停止
if nowSize <= targetSize then
call SetTextTagTextBJ(tt, text, targetSize)
call ClearedTime(gradient_temp_texttag, clearedTime)
call SetTextTagVelocityBJ(gradient_temp_texttag, speed, angle)
call FlushChildHashtable(data, hid)
call DestroyTimer(t)
else
call SaveReal(data, hid, 1, nowSize)
endif
set tt = null
set t = null
endfunction
private function GradientTimerRunActions takes nothing returns nothing
// 读取数据
local timer t = GetExpiredTimer()
local integer hid = GetHandleId(t)
local texttag tt = LoadTextTagHandle(data, hid, 0)
local real nowSize = LoadReal(data, hid, 1)
local real targetSize = LoadReal(data, hid, 2)
local real intervals = LoadReal(data, hid, 3)
local real frequently = LoadReal(data, hid, 4)
local integer modeType = LoadInteger(data, hid, 5)
local string text = LoadStr(data, hid, 6)
local real beginSize = LoadReal(data, hid, 7)
local real speed = LoadReal(data, hid, 8)
local real angle = LoadReal(data, hid, 9)
local real clearedTime = LoadReal(data, hid, 10)
// 变化大小
if modeType == gradient_type_toBiggerAndSmaller or modeType== gradient_type_toBigger then
call SetTextTagTextBJ(tt, text, (nowSize + intervals))
set nowSize = nowSize + intervals
elseif modeType == gradient_type_toSmaller then
call SetTextTagTextBJ(tt, text, (nowSize - intervals))
set nowSize = nowSize - intervals
endif
// 如果大小超过了目标值则停止
if modeType == gradient_type_toBiggerAndSmaller or modeType== gradient_type_toBigger then
if nowSize >= targetSize then
call SetTextTagTextBJ(tt, text, targetSize)
call ClearedTime(gradient_temp_texttag, clearedTime)
call SetTextTagVelocityBJ(gradient_temp_texttag, speed, angle)
call FlushChildHashtable(data, hid)
call DestroyTimer(t)
// 如果是先变大再变小则再运行一次变小
if modeType == gradient_type_toBiggerAndSmaller then
set t = InitGradientData(tt, text, targetSize, beginSize, gradient_type_toSmaller, intervals, frequently, speed, angle, clearedTime)
call TimerStart(t, frequently, true, function GradientRunBiggerToSmallerActions)
endif
else
call SaveReal(data, hid, 1, nowSize)
endif
elseif modeType == gradient_type_toSmaller then
if nowSize <= targetSize then
call SetTextTagTextBJ(tt, text, targetSize)
call ClearedTime(gradient_temp_texttag, clearedTime)
call SetTextTagVelocityBJ(gradient_temp_texttag, speed, angle)
call FlushChildHashtable(data, hid)
call DestroyTimer(t)
else
call SaveReal(data, hid, 1, nowSize)
endif
endif
set tt = null
set t = null
endfunction
function SoGradientRun takes texttag tt, string text, real beginSize, real targetSize, integer modeType, real intervals, real frequently, real speed, real angle, real clearedTime returns texttag
local timer t
set gradient_temp_texttag = tt
// 没有变化模式下,直接设置消失时间和速率
if modeType == gradient_type_none then
call ClearedTime(gradient_temp_texttag, clearedTime)
call SetTextTagVelocityBJ(gradient_temp_texttag, speed, angle)
else
// 合法性校验
if GradientCheckSize(modeType, beginSize, targetSize) then
set t = InitGradientData(gradient_temp_texttag, text, beginSize, targetSize, modeType, intervals, frequently, speed, angle, clearedTime)
call TimerStart(t, frequently, true, function GradientTimerRunActions)
set t = null
else
// 合法性校验不通过时,按没有变化模式处理
call ClearedTime(gradient_temp_texttag, clearedTime)
call SetTextTagVelocityBJ(gradient_temp_texttag, speed, angle)
endif
endif
return gradient_temp_texttag
endfunction
// & 新建渐变漂浮文字到单位头顶
function SoGradientTextTagToUnit takes string text, unit whichUnit, real offset, real beginSize, real targetSize, integer modeType, real intervals, real frequently, real colorR, real colorG, real colorB, real transparency, real speed, real angle, real clearedTime returns texttag
// 生成漂浮文字
set gradient_temp_texttag = CreateTextTagUnitBJ(text, whichUnit, offset, beginSize, colorR, colorG, colorB, transparency)
call SoGradientRun(gradient_temp_texttag, text, beginSize, targetSize, modeType, intervals, frequently, speed, angle, clearedTime)
return gradient_temp_texttag
endfunction
/* &设置渐变漂浮文字的淡化时间
* 这项设置是全局的,如果输入的值不合法将不修改淡化时间
* 返回:设置是否成功
*/
function SoGradientSetFadeTime takes real time returns boolean
if time >= 0 then
set gradient_fade_time = time
return true
else
return false
endif
endfunction

@ -0,0 +1,66 @@
#ifndef SoBasePatchLIncluded
#define SoBasePatchLIncluded
globals
private constant integer Itemtype_So_RenHe = 0 //物品分类 - 任何
private constant integer Itemtype_So_YongJiu = 1 //物品分类 - 永久
private constant integer Itemtype_So_KeChong = 2 //物品分类 - 可充
private constant integer Itemtype_So_NengLiangTiSheng = 3 //物品分类 - 能量提升
private constant integer Itemtype_So_RenZao = 4 //物品分类 - 人造
private constant integer Itemtype_So_KeGouMai = 5 //物品分类 - 可购买
private constant integer Itemtype_So_ZhanYi = 6 //物品分类 - 战役
private constant integer Itemtype_So_HunZa = 7 //物品分类 - 混杂
private itemtype ITEM_TYPE_CBACK = ConvertItemType(8)
private integer ITEM_TYPE_VBACK = 0
endglobals
/* 物品分类 按编表 转换为整数
编表一般用于选择框等场景
*/
function SoGetItemTypeForVal takes integer nve returns itemtype
if (nve == Itemtype_SouL_RenHe) then
set ITEM_TYPE_CBACK = ITEM_TYPE_ANY
elseif (nve == Itemtype_SouL_YongJiu) then
set ITEM_TYPE_CBACK = ITEM_TYPE_PERMANENT
elseif (nve == Itemtype_SouL_KeChong) then
set ITEM_TYPE_CBACK = ITEM_TYPE_CHARGED
elseif (nve == Itemtype_SouL_NengLiangTiSheng) then
set ITEM_TYPE_CBACK = ITEM_TYPE_POWERUP
elseif (nve == Itemtype_SouL_RenZao) then
set ITEM_TYPE_CBACK = ITEM_TYPE_ARTIFACT
elseif (nve == Itemtype_SouL_KeGouMai) then
set ITEM_TYPE_CBACK = ITEM_TYPE_PURCHASABLE
elseif (nve == Itemtype_SouL_ZhanYi) then
set ITEM_TYPE_CBACK = ITEM_TYPE_CAMPAIGN
elseif (nve == Itemtype_SouL_HunZa) then
set ITEM_TYPE_CBACK = ITEM_TYPE_MISCELLANEOUS
endif
return ITEM_TYPE_CBACK
endfunction
/* 反转换 */
function SoGetValForItemType takes itemtype nve returns integer
if (nve == ITEM_TYPE_ANY) then
set ITEM_TYPE_VBACK = Itemtype_SouL_RenHe
elseif (nve == ITEM_TYPE_PERMANENT) then
set ITEM_TYPE_VBACK = Itemtype_SouL_YongJiu
elseif (nve == ITEM_TYPE_CHARGED) then
set ITEM_TYPE_VBACK = Itemtype_SouL_KeChong
elseif (nve == ITEM_TYPE_POWERUP) then
set ITEM_TYPE_VBACK = Itemtype_SouL_NengLiangTiSheng
elseif (nve == ITEM_TYPE_ARTIFACT) then
set ITEM_TYPE_VBACK = Itemtype_SouL_RenZao
elseif (nve == ITEM_TYPE_PURCHASABLE) then
set ITEM_TYPE_VBACK = Itemtype_SouL_KeGouMai
elseif (nve == ITEM_TYPE_CAMPAIGN) then
set ITEM_TYPE_VBACK = Itemtype_SouL_ZhanYi
elseif (nve == ITEM_TYPE_MISCELLANEOUS) then
set ITEM_TYPE_VBACK = Itemtype_SouL_HunZa
endif
return ITEM_TYPE_VBACK
endfunction
private function SoSetup takes nothing returns nothing
/* 处理一些初始化设置 */
endfunction
#endif //SoBasePatchLIncluded

@ -0,0 +1,3 @@
[SoPigeon]
SoGradientTextTagToUnit
SoGradientSetFadeTime

@ -0,0 +1,18 @@
#ifndef SoPigeonIncluded
#define SoPigeonIncluded
library SoPigeon initializer SoPigeonSetup needs SoBase
globals
private hashtable data = InitHashtable()
endglobals
#include "Pigeon/GradientTextTag.j"
function SoPigeonSetup takes nothing returns nothing
endfunction
endlibrary
#endif //SoPigeonIncluded

@ -0,0 +1 @@
[SoSimplify]

@ -0,0 +1,44 @@
#ifndef SoSimplifyIncluded
#define SoSimplifyIncluded
library SoSimplify needs SoBase initializer SimplifySetup
// 坐标间距
/*
求 (x1, y1) 到 (x2, y2) 的距离
*/
function SoSpacing takes real x1, real y1, real x2, real y2 returns real
local real fx = x2 - x1
local real fy = y2 - y1
return SquareRoot(fx * fx + fy * fy)
endfunction
// 坐标间方向
/* 参数: x1, y1, x2, y2
求 (x1, y1) 到 (x2, y2) 的方向
*/
function SoC2A takes real x1, real y1, real x2, real y2 returns real
return bj_RADTODEG * Atan2(y2 - y1, x2 - x1)
endfunction
/* 取绝对值 */
private function SRabs takes real a returns real
if (a<0) then
return -a
else
return a
endif
endfunction
//三点所在的矩形面积
function SoGetRectAera takes real xa,real ya,real xb,real yb,real xc,real yc returns real
return SRabs( xa*yb - xa*yc + xb*yc - xb*ya + xc*ya - xc*yb )
endfunction
function SoSimplifySetup takes nothing returns nothing
// 初始化一些设置
endfunction
endlibrary
#endif //SoSimplifyIncluded

@ -0,0 +1,3 @@
[SoBase]
SoGetItemTypeForVal
SoGetValForItemType

@ -0,0 +1,10 @@
#ifndef SoBaseLIncluded
#define SoBaseLIncluded
library SoBase initializer SoSetup
#include "So/SoBase.j"
endlibrary
#endif //SoBaseLIncluded

@ -4,3 +4,4 @@ dzapi2
dzapi dzapi
bzapi bzapi
ydtrigger ydtrigger
so

@ -0,0 +1,73 @@
[SoGradientTextTagToUnit]
title = "创建渐变漂浮文字2.0(指定单位) [SoUI]"
description = "创建渐变漂浮文字: ${文字} 在 ${单位}的头顶, Z轴偏移 ${Z},字体大小: ${Size}, 目标大小: ${TargetSize}, 变化模式: ${模式},变化间隔: ${大小}, 变化频率 ${频率}, 颜色值:(${Red}%, ${Green}%, ${Blue}%) ,透明度: ${Transparency}% , 漂浮文字速度为 ${Speed}, 方向是 ${角度} 度, 在 ${时间} 秒后消失."
comment = "渐变之后才开始计算消失时间, 消失前1秒会开始淡化.颜色格式为(红,绿,蓝).若目标大小设置错误将导致无法渐变.每个渐变漂浮文字都需要创建一个计时器."
category = TC_TEXTTAG
[[.args]]
type = StringExt
[[.args]]
type = unit
default = "GetTriggerUnit"
[[.args]]
type = real
default = "0"
[[.args]]
type = real
default = "12"
min = 1
[[.args]]
type = real
default = "18"
[[.args]]
type = GradiendTypeOpi
default = "GradiendTypeOpiC"
[[.args]]
type = real
default = "0.6"
min = 0
[[.args]]
type = GradiendFrequencyOpi
default = "GradiendFrequencyOpiE"
min = 1
[[.args]]
type = real
default = "100"
min = 0
max = 100
[[.args]]
type = real
default = "100"
min = 0
max = 100
[[.args]]
type = real
default = "100"
min = 0
max = 100
[[.args]]
type = real
default = "0"
min = 0
max = 100
[[.args]]
type = real
default = "64"
[[.args]]
type = real
default = "90"
min = 0
max = 360
[[.args]]
type = real
default = "5"
min = 0
[SoGradientSetFadeTime]
title = "设置淡化时间 [SoUI]"
description = "设置渐变漂浮文字的淡化时间为 ${time}."
comment = "这项设置是全局的, 如果输入的值不合法将不修改淡化时间."
category = TC_TEXTTAG
[[.args]]
type = real
default = "1"
min = 0

@ -0,0 +1,10 @@
[SoGradientSetFadeTime]
title = "设置淡化时间 [SoUI]"
description = "成功设置渐变漂浮文字的淡化时间为 ${time}."
comment = "这项设置是全局的, 如果输入的值不合法将不修改淡化时间."
category = TC_TEXTTAG
returns = boolean
[[.args]]
type = real
default = "1"
min = 0

@ -0,0 +1,18 @@
[TriggerCategories]
TC_PIGEON=Pigeon,ReplaceableTextures\CommandButtons\BTNRejuvenation.blp
[TriggerTypes]
GradiendTypeOpi=0,0,0,变化模式,real
GradiendFrequencyOpi=0,0,0,变化频率,real
[TriggerParams]
GradiendTypeOpiA=0,GradiendTypeOpi,gradient_type_none,没有
GradiendTypeOpiB=0,GradiendTypeOpi,gradient_type_toBigger,变小
GradiendTypeOpiC=0,GradiendTypeOpi,gradient_type_toSmaller,变大
GradiendTypeOpiD=0,GradiendTypeOpi,gradient_type_toBiggerAndSmaller,先变大后变小
GradiendFrequencyOpiA=0,GradiendFrequencyOpi,gradient_frequency_10Hz,10Hz
GradiendFrequencyOpiB=0,GradiendFrequencyOpi,gradient_frequency_20Hz,20Hz
GradiendFrequencyOpiC=0,GradiendFrequencyOpi,gradient_frequency_25Hz,25Hz
GradiendFrequencyOpiD=0,GradiendFrequencyOpi,gradient_frequency_33Hz,33Hz
GradiendFrequencyOpiE=0,GradiendFrequencyOpi,gradient_frequency_50Hz,50Hz
GradiendFrequencyOpiF=0,GradiendFrequencyOpi,gradient_frequency_100Hz,100Hz
Loading…
Cancel
Save