2025-01-04 23:00:19 +08:00

144 lines
7.6 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

SignalCircleConfig = SignalCircleConfig or {}
-- 实际开始时间为前面所有圈的 delaytime + SafeZoneAppeartime + lasttime
SignalCircleConfig.CircleList = {
[1] = {
{
delaytime = 3; -- 激活该缩圈的延迟时间
SafeZoneAppeartime = 3; -- 提示即将缩圈的提示存在时间
lasttime = 7; -- 缩圈的时间
blueradius = 30000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
whiteradius = 14000; -- 白圈半径,即蓝圈缩至的大小
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
},
{
delaytime = 15; -- 激活该缩圈的延迟时间
SafeZoneAppeartime = 15; -- 提示即将缩圈的提示存在时间
lasttime = 20; -- 缩圈的时间
blueradius = 14000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
whiteradius = 8000; -- 白圈半径,即蓝圈缩至的大小
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
},
{
delaytime = 30; -- 激活该缩圈的延迟时间
SafeZoneAppeartime = 15; -- 提示即将缩圈的提示存在时间
lasttime = 20; -- 缩圈的时间
blueradius = 8000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
whiteradius = 2000; -- 白圈半径,即蓝圈缩至的大小
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
},
{
delaytime = 10; -- 激活该缩圈的延迟时间
SafeZoneAppeartime = 3; -- 提示即将缩圈的提示存在时间
lasttime = 10; -- 缩圈的时间
blueradius = 2000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
whiteradius = 1; -- 白圈半径,即蓝圈缩至的大小
pain = 10; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
},
},
[2] = {
{
delaytime = 3; -- 激活该缩圈的延迟时间
SafeZoneAppeartime = 3; -- 提示即将缩圈的提示存在时间
lasttime = 7; -- 缩圈的时间
blueradius = 20000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
whiteradius = 8000; -- 白圈半径,即蓝圈缩至的大小
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
},
{
delaytime = 15; -- 激活该缩圈的延迟时间
SafeZoneAppeartime = 15; -- 提示即将缩圈的提示存在时间
lasttime = 20; -- 缩圈的时间
blueradius = 8000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
whiteradius = 4000; -- 白圈半径,即蓝圈缩至的大小
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
},
{
delaytime = 30; -- 激活该缩圈的延迟时间
SafeZoneAppeartime = 15; -- 提示即将缩圈的提示存在时间
lasttime = 20; -- 缩圈的时间
blueradius = 4000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
whiteradius = 1000; -- 白圈半径,即蓝圈缩至的大小
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
},
{
delaytime = 10; -- 激活该缩圈的延迟时间
SafeZoneAppeartime = 3; -- 提示即将缩圈的提示存在时间
lasttime = 10; -- 缩圈的时间
blueradius = 1000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
whiteradius = 1; -- 白圈半径,即蓝圈缩至的大小
pain = 10; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
},
}
}
--- 注册缩圈信息,必须注册了才能缩圈,不然可能会出现问题
---@param GMDataSourcePoisonCircleIndex GameMode-DataManager-GMDataManager-DataSources中配置的GMDataSourcePoisonCircle对应的索引这里会自动+1所以对应蓝图中的索引即可
---@param CenterPoint FVector2D 毒圈的中心点位
---@param RandomCircle bool 是否为随机毒圈
---@param CircleIndex int 默认为1使用的毒圈配置的索引对应CircleList
function SignalCircleConfig.RegisterCircleInfo(GMDataSourcePoisonCircleIndex, CenterPoint, RandomCircle, CircleIndex)
--- 设置参数
-- 索引
SignalCircleConfig.SourcesIndex = GMDataSourcePoisonCircleIndex + 1
-- 中心点
SignalCircleConfig.CenterPoint = CenterPoint
-- 使用的毒圈配置类型
SignalCircleConfig.UseCircleIndex = CircleIndex and CircleIndex or 1
-- 是否为随机毒圈
SignalCircleConfig.IsRandomCircle = RandomCircle
-- 激活毒圈的次数
SignalCircleConfig.ActiveCircleCount = 0
end
--- 执行缩圈
--- 若为随机毒圈则这里会自动获取一个新的毒圈
function SignalCircleConfig.TogglePoisonCircle()
-- 配置一个新毒圈
SignalCircleConfig.UpdateNewCircleData()
-- 开始缩圈
UGCBlueprintFunctionLibrary.TogglePoisonCircle(UGCGameSystem.GameState, true);
-- 增加一次使用毒圈的次数
SignalCircleConfig.ActiveCircleCount = SignalCircleConfig.ActiveCircleCount + 1
end
function SignalCircleConfig.UpdateNewCircleData()
-- 如果非随机毒圈且已配置过一次则不再进行配置
if not SignalCircleConfig.IsRandomCircle and SignalCircleConfig.ActiveCircleCount > 0 then return end
-- 清空毒圈配置
UGCGameSystem.GameMode.DataManager.DataSources[SignalCircleConfig.SourcesIndex].CircleConfigs:Empty()
-- 配置毒圈
local CircleCenterPoint = SignalCircleConfig.CenterPoint
for CircleLayer, CircleInfo in pairs(SignalCircleConfig.CircleList[SignalCircleConfig.UseCircleIndex]) do
local NewCirCleCfg = SignalCircleConfig.NewCirCleCfgStruct()
-- 拷贝参数
for ParamName, ParamVal in pairs(CircleInfo) do
NewCirCleCfg[ParamName] = ParamVal
end
-- 设置使用自定义白圈
NewCirCleCfg.bUseCustomWhitePoint = true
-- 设置自定义蓝圈
NewCirCleCfg.bUseCustomBluePoint = true
-- 设置蓝圈中心
NewCirCleCfg.bluepoint = {X = CircleCenterPoint.X, Y = CircleCenterPoint.Y}
-- 判断是否要对毒圈的中心点进行随机设置
if SignalCircleConfig.IsRandomCircle and CircleLayer > 1 then
-- 获取可进行随机的偏移
local RandomDeviation = CircleInfo.blueradius - CircleInfo.whiteradius
local AddRandomX = RandomDeviation * math.random() * 2 - RandomDeviation
local AddRandomY = RandomDeviation * math.random() * 2 - RandomDeviation
-- 设置中心偏移
CircleCenterPoint = VectorHelper.Add2D(CircleCenterPoint, {X = AddRandomX, Y = AddRandomY} )
end
-- 设置目标白圈的中心
NewCirCleCfg.whitepoint = {X = CircleCenterPoint.X, Y = CircleCenterPoint.Y}
UGCLogSystem.LogTree("[SignalCircleConfig_UpdateNewCircleData] NewCirCleCfg:", UE.ToTable(NewCirCleCfg))
-- 加入GM的毒圈设置
UGCGameSystem.GameMode.DataManager.DataSources[SignalCircleConfig.SourcesIndex].CircleConfigs:Add(NewCirCleCfg)
end
end
function SignalCircleConfig.NewCirCleCfgStruct()
return UE.CreateStruct("CirCleCfg")
end