144 lines
7.6 KiB
Lua
Raw Normal View History

2025-01-04 23:00:19 +08:00
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