148 lines
7.7 KiB
Lua
148 lines
7.7 KiB
Lua
|
SignalCircleConfig = SignalCircleConfig or {}
|
|||
|
|
|||
|
-- 实际开始时间为前面所有圈的 delaytime + SafeZoneAppeartime + lasttime
|
|||
|
SignalCircleConfig.CircleList = {
|
|||
|
[1] = {
|
|||
|
{
|
|||
|
delaytime = 3; -- 激活该缩圈的延迟时间
|
|||
|
SafeZoneAppeartime = 3; -- 提示即将缩圈的提示存在时间
|
|||
|
lasttime = 4; -- 缩圈的时间
|
|||
|
blueradius = 30000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
|
|||
|
whiteradius = 14000; -- 白圈半径,即蓝圈缩至的大小
|
|||
|
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
|
|||
|
},
|
|||
|
{
|
|||
|
delaytime = 0; -- 激活该缩圈的延迟时间
|
|||
|
SafeZoneAppeartime = 30; -- 提示即将缩圈的提示存在时间
|
|||
|
lasttime = 35; -- 缩圈的时间
|
|||
|
blueradius = 14000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
|
|||
|
whiteradius = 8000; -- 白圈半径,即蓝圈缩至的大小
|
|||
|
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
|
|||
|
},
|
|||
|
{
|
|||
|
delaytime = 0; -- 激活该缩圈的延迟时间
|
|||
|
SafeZoneAppeartime = 30; -- 提示即将缩圈的提示存在时间
|
|||
|
lasttime = 35; -- 缩圈的时间
|
|||
|
blueradius = 8000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
|
|||
|
whiteradius = 4000; -- 白圈半径,即蓝圈缩至的大小
|
|||
|
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
|
|||
|
},
|
|||
|
{
|
|||
|
delaytime = 0; -- 激活该缩圈的延迟时间
|
|||
|
SafeZoneAppeartime = 25; -- 提示即将缩圈的提示存在时间
|
|||
|
lasttime = 15; -- 缩圈的时间
|
|||
|
blueradius = 4000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
|
|||
|
whiteradius = 1; -- 白圈半径,即蓝圈缩至的大小
|
|||
|
pain = 10; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
|
|||
|
},
|
|||
|
},
|
|||
|
[2] = {
|
|||
|
{
|
|||
|
delaytime = 3; -- 激活该缩圈的延迟时间
|
|||
|
SafeZoneAppeartime = 3; -- 提示即将缩圈的提示存在时间
|
|||
|
lasttime = 4; -- 缩圈的时间
|
|||
|
blueradius = 20000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
|
|||
|
whiteradius = 8000; -- 白圈半径,即蓝圈缩至的大小
|
|||
|
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
|
|||
|
},
|
|||
|
{
|
|||
|
delaytime = 0; -- 激活该缩圈的延迟时间
|
|||
|
SafeZoneAppeartime = 30; -- 提示即将缩圈的提示存在时间
|
|||
|
lasttime = 35; -- 缩圈的时间
|
|||
|
blueradius = 8000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
|
|||
|
whiteradius = 4000; -- 白圈半径,即蓝圈缩至的大小
|
|||
|
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
|
|||
|
},
|
|||
|
{
|
|||
|
delaytime = 0; -- 激活该缩圈的延迟时间
|
|||
|
SafeZoneAppeartime = 30; -- 提示即将缩圈的提示存在时间
|
|||
|
lasttime = 35; -- 缩圈的时间
|
|||
|
blueradius = 4000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
|
|||
|
whiteradius = 2000; -- 白圈半径,即蓝圈缩至的大小
|
|||
|
pain = 2; -- 毒圈伤害,这个伤害他们是单独计算的,非血量伤害
|
|||
|
},
|
|||
|
{
|
|||
|
delaytime = 0; -- 激活该缩圈的延迟时间
|
|||
|
SafeZoneAppeartime = 25; -- 提示即将缩圈的提示存在时间
|
|||
|
lasttime = 15; -- 缩圈的时间
|
|||
|
blueradius = 2000; -- 蓝圈初始的半径,若此圈非初始圈则需要保持和前面的白圈大小一致
|
|||
|
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} )
|
|||
|
CircleCenterPoint = math.RandomCirclePoint(RandomDeviation, CircleCenterPoint)
|
|||
|
|
|||
|
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
|