local Base = require("Battle/Logic/AI/Decision/Decision_Base") local Decision_Broadcast = class("Decision_Broadcast", Base) --[[ 初始化 --]] function Decision_Broadcast:initialize(entity) --类型 self.Type = LuaConst.DecisionType.Broadcast --瞬时 self.IsOnce = true end --[[ 输出指令 --]] function Decision_Broadcast:SetCommand(entity, decisionData, command) command.DecisionID = decisionData.ID return command end --[[ 执行 --]] function Decision_Broadcast:Handle(entity, decisionData, stateType, animName) if decisionData.IntParam1 == 1 then --全体 for key,tempEntity in pairs(entity.components.group.GroupEntityList) do --tempEntity.components.group:SetGroupDecisionData(DecisionData[decisionData.NextDecisionData.ID]) --old 现在数据合并了,不要访问DecisionData了 tempEntity.components.group:SetGroupDecisionData(decisionData.NextDecisionData) end elseif decisionData.IntParam1 == 2 then --随机 local randomEntityList = {} local addCount = 0 local groupComponent = entity.components.group -- old↓ 这个随机实现有问题,会随出重复的 -- local repeatCount = 0 -- local repeatCountLimit = decisionData.IntParam2 * 2 --防止死循环 -- while(repeatCount < repeatCountLimit and addCount < decisionData.IntParam2 and addCount < groupComponent.CurGroupEntityCount) do -- repeatCount = repeatCount + 1 -- local index = LogicRandom.GetIntegerValue(nil, 1, groupComponent.CurGroupEntityCount ,1011) -- index = 1--for debug deleteme now -- if not randomEntityList[index] and groupComponent.GroupEntityList[index] then -- table.insert(randomEntityList, groupComponent.GroupEntityList[index]) -- addCount = addCount + 1 -- end -- end -- old↑ -- new↓ 正经的随机 for i=1,#groupComponent.GroupEntityList do randomEntityList[i] = groupComponent.GroupEntityList[i] end if decisionData.IntParam2 < groupComponent.CurGroupEntityCount then for i=1,decisionData.IntParam2 do local swapIndex = LogicRandom.GetIntegerValue(nil, i, groupComponent.CurGroupEntityCount, 1011) if swapIndex ~= i then local temp = randomEntityList[i] randomEntityList[i] = randomEntityList[swapIndex] randomEntityList[swapIndex] = temp end addCount = addCount + 1 end for k = decisionData.IntParam2 + 1, groupComponent.CurGroupEntityCount do randomEntityList[k] = nil end end -- new↑ for key,tempEntity in pairs(randomEntityList) do --tempEntity.components.group:SetGroupDecisionData(DecisionData[decisionData.NextDecisionData.ID]) --old 现在数据合并了,不要访问DecisionData了 tempEntity.components.group:SetGroupDecisionData(decisionData.NextDecisionData) end end return LuaConst.StateType.None,nil end return Decision_Broadcast