local Base = require("Battle/Expression/ExpLevel/ExpLevelFunction/ExpLevelFunction") local ExpSyncLevelFunction = class("ExpSyncLevelFunction",Base) local EventSystem = require('Event/EventSystem') local EStatisticType = LuaConst.EStatisticType --killer 是 originEntity function ExpSyncLevelFunction:BeforeClearHeroComboKillNum(deadEntity, comboKillNum, killer) end --这里的killer是 originEntity function ExpSyncLevelFunction:OnHandleHeroDead(killer, deadEntity, involveKillPlayerIDList, assistHeroEntityIDList, kStatistic, relaxAssistPlayerIDList) EventSystem.Dispatch(EventID.Level_HeroDead, killer, deadEntity, involveKillPlayerIDList, assistHeroEntityIDList, relaxAssistPlayerIDList) -- 显示 n 助 if killer ~= deadEntity then EventSystem.Dispatch(EventID.Level_UpdateKillHeroNum, killer, kStatistic and kStatistic[EStatisticType.HeroKillNum]) --显示 n 斩 end end --region 在场景中创建 范围圈 local EFFECT_Width = 2 -- 特效的长度 local VisualObject = require("Battle/Expression/VisualObject") local PATH_EFFECT = ConstAssetPathConfig.PATH_EFFECT --常驻特效圈信息 local Limit_EFFECT_Radius = 2.8 local CONST_PATH_EFFECT = ConstAssetPathConfig.CONST_PATH_EFFECT -- 这特效 半径2.8米 function ExpSyncLevelFunction:PlayLimitRadiusEffect(anchorPos,radius) self.obstructObjList = {} local centerX,centerZ =FP.tonumberV2(anchorPos) -- 圆心 local circleRadius = radius -- 圆半径 local sin = EFFECT_Width / 2 / circleRadius local angle = math.asin(sin) * 2 -- 一个小矩形的跨越角度 local count = 2 * math.pi / angle -- 一共多少个 -- 计算位置和朝向,防止阻挡 for i=1,count do local offsetAngle = (i-1) * angle local sinA = math.sin(offsetAngle) local cosA = math.cos(offsetAngle) local offsetX = circleRadius * sinA local offsetZ = circleRadius * cosA local posX,posZ = centerX + offsetX ,centerZ + offsetZ local obstructObj = VisualObject.CreateObstructEffectTrigger(ExpLevelManager.SceneObjParent, PATH_EFFECT, EFFECT_Width, 1, 4)-- 4 是碰撞盒的scalez obstructObj:SetPositionAndDirection(sinA, cosA, posX, 0, posZ) obstructObj:Invoke('SetChildLocalPosition', 0, -0.5, 0) table.insert(self.obstructObjList, obstructObj) end --额外的常驻的特效圈 local obstructObj = VisualObject.CreateVisualObject(CONST_PATH_EFFECT, ExpLevelManager.SceneObjParent) local px, pz = FP.tonumberV2(anchorPos) obstructObj:SetPositionAndDirection(0, 1, px, 0, pz, 0) obstructObj:SetScale(radius/Limit_EFFECT_Radius,1,radius/Limit_EFFECT_Radius) table.insert(self.obstructObjList, obstructObj) end function ExpSyncLevelFunction:OnLevelOver() if self.obstructObjList then for i = #self.obstructObjList,1,-1 do self.obstructObjList[i]:Dispose() self.obstructObjList[i] = nil end self.obstructObjList = nil end end --endregion 在场景中创建 范围圈 function ExpSyncLevelFunction:OnRevive(entity) Base.OnRevive(self, entity) if self.levelFunction.LevelReviveType == LuaConst.LevelReviveType.SelectOne then UIManager.CloseView(Const_UI_Lua.UIEnum.UISwitchHeroReviveView) end end -- 关闭倒计时的界面 function ExpSyncLevelFunction:CloseCountDownFormalPanel() EventSystem.Dispatch(EventID.Level_CloseUIView, Const_UI_Lua.UIEnum.UIBattleCountDownCasualPanel) end function ExpSyncLevelFunction:HangUpTipsForPunish(playerID, leftFrame) if playerID == LevelPlayerManager.MyPlayerIDInRoom then local str = string.FormatByIdsKey("IDS_PunishForAFK_NoticeTips1", leftFrame / 20) CTL.Tips.AddTipsMsg(str) end end function ExpSyncLevelFunction:OnHangUpAutoFightToPunish(playerID) if playerID == LevelPlayerManager.MyPlayerIDInRoom then UTL.MessageBox.ShowOnlyOkNoCloseBox(Const_IDS.IDS_WARNING, Const_IDS.IDS_PunishForAFK_NoticeTips2) end end --region 特殊的玩法修改头顶名字(注意:不要乱用,有些name是参与逻辑运算的) function ExpSyncLevelFunction:SetPracticeRobotName(playerID) local playerInfo = LevelPlayerManager.GetPlayerInfoByPlayerIDInRoom(playerID) local entityList = LevelPlayerManager.GetPlayerEntitysByPlayerIDInRoom(playerID) local name = CTL.Character.GetRobotName(playerInfo.acid) playerInfo.name = name for i,entity in ipairs(entityList) do entity._logicInitData.Name = name SystemManager.ChangeEntityName(entity, name) end end --endregion 特殊的玩法修改头顶名字(注意:不要乱用,有些name是参与逻辑运算的) return ExpSyncLevelFunction