--视野Component --视野等级、视野组、可视等级、可视组说明: --对于视野等级为N的单位A --可以看到: --1、可视等级 0 then return v.level, v.group end end return 0, nil end --LevelFunction中有直接访问,请注意 function VisualFieldComponent:GetVisualLevel() return self._visualLv end function VisualFieldComponent:GetVisualGroup() return self._visualGroup end function VisualFieldComponent:SetVisibility(level, group, levelItemID) self:RefreshRecord(level, group, levelItemID, self._visibilityRecordList) level, group = self:GetTopLevelAndGroupByRecord(self._visibilityRecordList) local isChanged local oldLv = self._visibilityLv local oldGroup = self._visualbilityGroup if self._visibilityLv ~= level then self._visibilityLv = level isChanged = true end if self._visualbilityGroup ~= group then self._visualbilityGroup = group isChanged = true end if isChanged then --logging.error(LTAG.ERROR, "HYW : SetVisibility : ", level, group) self:OnVisiblityChanged(oldLv, oldGroup) end end function VisualFieldComponent:GetVisiblityLevel() return self._overrideVisibilityLv or self._visibilityLv end function VisualFieldComponent:GetOriginVisiblityLevel() return self._visibilityLv end function VisualFieldComponent:GetVisiblityGroup() return self._visualbilityGroup end function VisualFieldComponent:SetOverrideVisibilityLv(value, key) if key then local oldLv local isChanged if value then local record for i,v in ipairs(self._overrideVisibilityList) do if v.key == key then record = v break end end if not record then record = {key = key} oldLv = self._visibilityLv table.insert(self._overrideVisibilityList, record) end if record.value ~= value then oldLv = record.value record.value = value isChanged = true end else for i,v in ipairs(self._overrideVisibilityList) do if v.key == key then oldLv = v.value isChanged = true table.remove(self._overrideVisibilityList, i) break end end end if isChanged then local highestLv for i,v in ipairs(self._overrideVisibilityList) do if highestLv == nil or v.value > highestLv then highestLv = v.value end end if self._overrideVisibilityLv ~= highestLv then self._overrideVisibilityLv = highestLv --highestLv为nil也是合法值,代表没有任何override记录了,取消掉override值 oldLv = oldLv or self._visibilityLv self:OnVisiblityChanged(oldLv, self._visualGroup) end end else if self._overrideVisibilityLv ~= value then local oldLv = self._overrideVisibilityLv or self._visibilityLv self._overrideVisibilityLv = value self:OnVisiblityChanged(oldLv, self._visualGroup) end end end function VisualFieldComponent:CanSeeVisibility(otherVisiblityLv, otherVisibilityGroup) return VisualFieldComponent.CanSee(self:GetVisualLevel(), self:GetVisualGroup(), otherVisiblityLv, otherVisibilityGroup) end function VisualFieldComponent:CanBeSawByVisual(otherVisualLv, otherVisualGroup) return VisualFieldComponent.CanSee(otherVisualLv, otherVisualGroup, self:GetVisiblityLevel(), self:GetVisiblityGroup()) end function VisualFieldComponent:CanBeSawByEntity(entity) if entity.components.visualField then return LevelManager.CurLevelFunc:CanSeeEntity(entity, self.entity) else return false end end function VisualFieldComponent:OnVisualFieldChanged(oldLv, oldGroup) SystemManager.OnVisualFieldChanged(self.entity, oldLv, oldGroup) end function VisualFieldComponent:OnVisiblityChanged(oldLv, oldGroup) SystemManager.OnVisiblityChanged(self.entity, oldLv, oldGroup) end --静态方法, 传入 视者的视野等级、视者的视野组,被视者的可视等级,被视者的可视组,返回视者是否能看见被视者 function VisualFieldComponent.CanSee(visualLevel, visualGroup, visibilityLevel, visibilityGroup) --logging.error(LTAG.ERROR, "HYW : ", visualLevel, visualGroup, visibilityLevel, visibilityGroup) return visualLevel > visibilityLevel or (visualLevel == visibilityLevel and (visualGroup == visibilityGroup or visualGroup == -1 or visibilityGroup == -1)) end return VisualFieldComponent