|
|
- require("game.scene.sceneobj.SceneEffect")
- require("game.scene.sceneobj.AlphaObj")
-
- MapView = MapView or BaseClass(BaseController)
- local MapView = MapView
- local lua_resM = lua_resM
- local string_find = string.find
- local Material_New = Material.New
- local math_floor = math.floor
- local GameMath_GetDistance = GameMath.GetDistance
-
- MapView.DefaultMapRes = 1001
-
- MapView.NoAreaLoadEffect =
- {
- -- ["scene_tiaoyue"] = true,
- ["effect_gate_001"] = true,
- }
-
- MapView.NoLoadModel =
- {
- -- ["scene_tiaoyue"] = true,
- ["XSCCZ_TT03_05"] = true,
- }
-
- MapView.CustomEffect = {
- [1001] = {name = "1001effect", customEffect = true, layer = 1, x = 0, y = 0, z = 0, bound = {off_x = 0, off_y = 0,off_z=0, size_x = 50, size_y = 50,size_z = 50}, speed = 1, euler_x = 0, euler_y = 0, euler_z = 0, effectScale_x = 1, effectScale_y = 1, effectScale_z = 1, level = 1},
- [1003] = {name = "1003effect", customEffect = true, layer = 1, x = 0, y = 0, z = 0, bound = {off_x = 0, off_y = 0,off_z=0, size_x = 50, size_y = 50,size_z = 50}, speed = 1, euler_x = 0, euler_y = 0, euler_z = 0, effectScale_x = 1, effectScale_y = 1, effectScale_z = 1, level = 1},
- [1005] = {name = "1005_effect_1", customEffect = true, layer = 1, x = 0, y = 0, z = 0, bound = {off_x = 0, off_y = 0,off_z=0, size_x = 50, size_y = 50,size_z = 50}, speed = 1, euler_x = 0, euler_y = 0, euler_z = 0, effectScale_x = 1, effectScale_y = 1, effectScale_z = 1, level = 1},
- }
-
- MapView.CustomEffectBox =
- {
- -- ["scene_fountain01"] = 1000,
- -- ["xsc_shui_worldwaterdark"] = 900000,
- -- ["scene1004_worldwater"] = 900000,
- -- ["scene1004_poolwater"] = 900000,
- -- ["scene1002worldwater"] = 900000,
- -- ["shamo_shui_1_2"] = 900000,
- -- ["shamo_shui_1_1"] = 900000,
- }
-
- MapView.LoadBigScene =
- {
- --[1000] = true,
- --[1002] = true,
- --[1003] = true,
- --[1004] = true,
- --[1005] = true,
- --[1006] = true,
- --[5801] = true,
- }
-
- MapView.FullScreenEffect =
- {
- -- name = "1000effect", layer = 1, x = 0, y = 0,z = 0,bound = {off_x = 0, off_y = 0,off_z=0, size_x = 30000, size_y = 30000,size_z = 30000}, speed = 1, euler_x = 0, euler_y = 0, euler_z = 0, effectScale_x =1, effectScale_y = 1, effectScale_z = 1, level = 1,
- }
-
- MapView.WaveList = {
- -- ["screenwave"] = false,
- -- ["screenwave3"] = false,
- -- ["haidi_g11_2"] = false,
- }
-
- MapView.MustAreaLoadEffect =
- {
- -- ["scene_zudangmen"] = true
- }
-
- --不使用模型合批的地图
- MapView.NoCombineModel =
- {
- -- [5801] = true,
- }
-
- MapView.HideEffectScene =
- {
- -- [6610] = {
- -- ["shamo_shui_1_1"] = true,
- -- ["shamo_shui_1_2"] = true,
- -- ["scene_firebig01"] = true,
- -- ["scene_firebig01 (1)"] = true,
- -- ["scene_waterfall01"] = true,
- -- ["scene_sunshine04 (4)"] = true,
- -- },
- -- [6611] = {
- -- ["shamo_shui_1_1"] = true,
- -- ["shamo_shui_1_2"] = true,
- -- ["scene_firebig01"] = true,
- -- ["scene_firebig01 (1)"] = true,
- -- ["scene_waterfall01"] = true,
- -- ["scene_sunshine04 (4)"] = true,
- -- },
- -- [6612] = {
- -- ["shamo_shui_1_1"] = true,
- -- ["shamo_shui_1_2"] = true,
- -- ["scene_firebig01"] = true,
- -- ["scene_firebig01 (1)"] = true,
- -- ["scene_waterfall01"] = true,
- -- ["scene_sunshine04 (4)"] = true,
- -- },
- -- [6613] = {
- -- ["shamo_shui_1_1"] = true,
- -- ["shamo_shui_1_2"] = true,
- -- ["scene_firebig01"] = true,
- -- ["scene_firebig01 (1)"] = true,
- -- ["scene_waterfall01"] = true,
- -- ["scene_sunshine04 (4)"] = true,
- -- },
- }
-
- --全加载地图
- MapView.AllLoadScene = {
- [1001] = true,
- }
-
- --不使用动态剔除的场景
- MapView.NoDisibleLoadScene = {
- -- [1001] = true,
- }
-
- MapView.EnterSceneLoad = {
- -- [1001] = true,
- -- [1002] = true,
- -- [1006] = true,
- -- [1008] = true,
- -- [1009] = true,
- }
-
- MapView.FindWayVector2One = Vector2(0,0)
- MapView.FindWayVector2Second = Vector2(0,0)
-
- function MapView:__init()
- MapView.Instance = self
-
- self.mapLoaded = false
- self.curMapData = nil
- self.async_load_map_obj = nil
-
- self.effect_list = {}
- self.move_obj_list = {}
- self.specialModel_list = {}
- self.load_prefab_temp_target = {}
- self.preload_prefab_temp_target = {}
- self.preload_scene_id = nil
-
- self.model_list = {}
- self.area_load_mode = true
- self.load_model_count = nil
- self.enter_scene_want_load_count = 0
-
- self.alpha_model_list = {}
- self.material_obj_list = {}
- self.material_ab_list = {}
-
- self.last_cache_model_check_time = 0
- self.model_cache_map = {}
- self.model_id_res_map = {}
- self.open_model_cache_state = true
- self.open_abres_immediately_delete_mode = false
-
- self.combine_mini_model = {}
- self.model_root_map = {}
- self.model_local_state = {}
- self.combine_model_state = false
- self.min_combine_count = 5
- self.timeout_enter_scene = false
-
- self.regiest_model_new_mode = true
- self.open_big_scene_mode = false
- self.have_combine_model = {}
- self.open_dynamic_visible_model = false
- self.cache_effect_obj = {}
- self.cache_effect_mode = false
-
- self.zone_height = {}
- self.zone_block = {}
- self.zone_type = {}
- self.area_type_cache = {}
-
- self.has_water_effect = {}
-
- if SystemRuntimePlatform.IsIphone() then
- self.open_model_cache_state = false
- self.open_abres_immediately_delete_mode = true
- end
-
- if tonumber(AppConst.EnglineVer) > 70 then
- mapMgr.logicWidth = SceneObj.LogicRealRatio.x
- mapMgr.logicHeight = SceneObj.LogicRealRatio.y
- end
-
- local account_change = function()
- self:ForceChangeMap(true)
- end
- local role_change = function()
- self:ForceChangeMap(false)
- end
- GlobalEventSystem:Bind(EventName.CHANGE_ACCOUNT, account_change)
- GlobalEventSystem:Bind(EventName.CHANGE_ROLE, role_change)
-
- local timeout_enter_scene = function()
- self.timeout_enter_scene = true
- SapManager.Instance:WaitLoadTerrainFinish(false)
- end
- GlobalEventSystem:Bind(EventName.TIMEOUT_ENTER_SCENE,timeout_enter_scene)
-
- local func = function()
- local data = {}
-
- local effect_count = 0
- for k,v in pairs(self.effect_list) do
- effect_count = effect_count + 1
- end
-
- local model_count = 0
- for k,v in pairs(self.model_list) do
- model_count = model_count + 1
- end
-
- local model_cache_map_count = 0
- for k,v in pairs(self.model_cache_map) do
- model_cache_map_count = model_cache_map_count + 1
- end
-
- data.effect_count = effect_count
- data.model_count = model_count
- data.model_cache_map_count = model_cache_map_count
-
- GlobalEventSystem:Fire(EventName.SENT_MODULE_DEBUG_DATA,"mapview", data)
- end
- GlobalEventSystem:Bind(EventName.CHECK_MODULE_DEBUG_DATA,func)
-
- local callfunc = function(module_name,func)
- self.set_root_visible_data_tab = self.set_root_visible_data_tab or {
- ["mapview@showbuhongpei"] = {node_name = "buhongpei", bool = true},
- ["mapview@hidebuhongpei"] = {node_name = "buhongpei", bool = false},
- ["mapview@showmodelcom"] = {node_name = "model_com_root", bool = true},
- ["mapview@hidemodelcom"] = {node_name = "model_com_root", bool = false},
- ["mapview@showsplitmodel"] = {node_name = "splitmodel", bool = true},
- ["mapview@hidesplitmodel"] = {node_name = "splitmodel", bool = false},
- ["mapview@showdongzuo"] = {node_name = "dongzuo", bool = true},
- ["mapview@hidedongzuo"] = {node_name = "dongzuo", bool = false},
- ["mapview@showway"] = {node_name = "xunlu", bool = true},
- ["mapview@hideway"] = {node_name = "xunlu", bool = false},
- ["mapview@showterrain"] = {node_name = "special", bool = true},
- ["mapview@hideterrain"] = {node_name = "special", bool = false},
- ["mapview@showshui"] = {node_name = "shui", bool = true},
- ["mapview@hideshui"] = {node_name = "shui", bool = false},
-
- ["mapview@showfog"] = {node_name = "fog", bool = true},
- ["mapview@hidefog"] = {node_name = "fog", bool = false},
- ["mapview@showaction"] = {node_name = "action", bool = true},
- ["mapview@hideaction"] = {node_name = "action", bool = false},
- ["mapview@showwater"] = {node_name = "water", bool = true},
- ["mapview@hidewater"] = {node_name = "water", bool = false},
- ["mapview@showspecial"] = {node_name = "special", bool = true},
- ["mapview@hidespecial"] = {node_name = "special", bool = false},
- }
-
- if module_name and func and self.set_root_visible_data_tab[module_name.."@"..func] then
- --简单的节点修改就直接在上面添加走这里,免得看起来太累赘
- local temp = self.set_root_visible_data_tab[module_name.."@"..func]
- self.set_root_show_call(GameObject.Find(temp.node_name) or self[temp.node_name],temp.bool)
- elseif module_name == "mapview" and func == "clear" then
- self:ClearData()
- elseif module_name == "mapview" and func == "combine" then
- self:CombineModel()
- elseif module_name == "mapview" and func == "hidescene" then
- self.model_root = GameObject.Find("model")
- self.set_root_show_call(self.model_root,false)
- if self.model_parent and self.model_parent ~= GameObject.Find("root").transform then
- self.set_root_show_call(self.model_parent,false)
- end
- elseif module_name == "mapview" and func == "showscene" then
- self.set_root_show_call(self.model_root,true)
- if self.model_parent and self.model_parent ~= GameObject.Find("root").transform then
- self.set_root_show_call(self.model_parent,true)
- end
- elseif module_name == "mapview" and func == "hidesky" then
- self.sky_root = GameObject.Find("Sky")
- self.sky_root_2 = GameObject.Find("sky")
- self.set_root_show_call(self.sky_root,false)
- self.set_root_show_call(self.sky_root_2,false)
- elseif module_name == "mapview" and func == "showsky" then
- self.set_root_show_call(self.sky_root,true)
- self.set_root_show_call(self.sky_root_2,true)
- elseif module_name == "mapview" and func == "hiderootall" then
- self:SetAllRootShow(false)
- elseif module_name == "mapview" and func == "showrootall" then
- self:SetAllRootShow(true)
- end
- end
- self.rootshowcall = callfunc
- self.set_root_show_call = function( root,bool )
- if not IsNull(root) and not IsNull(root.gameObject) then
- root.gameObject:SetActive(bool)
- end
- end
- GlobalEventSystem:Bind(EventName.DO_MODULE_DEBUG_FUNC,callfunc)
- end
-
- function MapView:SetAllRootShow( bool )
- if not self.rootshowcall or not self.set_root_show_call then
- return
- end
- if bool then
- if SceneManager.Instance:GetSceneId() ~= 1001 then
- self.rootshowcall("mapview","showscene")
- end
- self.rootshowcall("mapview","showsky")
- else
- if SceneManager.Instance:GetSceneId() ~= 1001 then
- self.rootshowcall("mapview","hidescene")
- end
- self.rootshowcall("mapview","hidesky")
- end
- -------------------------
- if self.set_root_visible_data_tab then
- for k,v in pairs(self.set_root_visible_data_tab) do
- if string.find(k, bool and "show" or "hide") then
- local obj = self[v.node_name]
- if IsNull(obj) then
- obj = GameObject.Find(v.node_name)
- if not IsNull(obj) then
- self[v.node_name] = obj
- end
- end
- self.set_root_show_call(obj , bool)
- end
- end
- end
- end
-
- function MapView:CheckCombineModel()
- self.support_model_combine = false
- if tonumber(AppConst.EnglineVer) >= 74 and self:CheckIOSCombine() then
- if self.curResId then
- local no_combine = MapView.NoCombineModel[tonumber(self.curResId)]
- if not no_combine then
- self.support_model_combine = true
- end
- else
- self.support_model_combine = true
- end
- end
-
- if not self.regiest_model_new_mode then
- self.support_model_combine = false
- end
- end
-
- function MapView:CheckIOSCombine()
- if SystemRuntimePlatform.IsIphone() then
- if RoleManager.Instance.mainRoleInfo.level == 1 and SystemMemoryLevel.Cur == SystemMemoryLevel.Hight then
- return true
- else
- return false
- end
- else
- return true
- end
- end
-
- function MapView:getInstance()
- if MapView.Instance == nil then
- MapView.New()
- end
- return MapView.Instance
- end
-
- function MapView:GetResID( is_minimap )
- if is_minimap then
- return Config.ConfigMiniMap[tonumber(self.curMapId)] or self.curResId
- end
- return self.curResId
- end
-
- function MapView:GetResIDByScene( scene, func )
- local scene_id = tonumber(scene)
- local res_id = Config.ConfigMiniMap[scene_id]
- if res_id then
- func(res_id)
- return
- end
-
- local load_call_back = function(objs)
- if objs and objs[0] then
- local txt = objs[0]
- mapMgr:LoadOtherMap(scene_id,txt)
- local mapdata = mapMgr:MapByScene(scene_id)
- func(mapdata.resId)
-
- if scene_id ~= self.curMapId then
- mapMgr:ClearMap(scene_id)
- end
- end
- end
- lua_resM:loadTextAsset(self.load_prefab_temp_target,"mapdata" .. scene_id,tonumber(scene_id),load_call_back,ASSETS_LEVEL.HIGHT)
- end
-
- function MapView:GetMapSize()
- if self.curMapData then
- return co.TableXY(self.curMapData.mapWidth,self.curMapData.mapHeight)
- else
- return co.TableXY(0,0)
- end
- end
-
- function MapView:Update( cam_pos )
- --print("-------Update-------")
- for index,obj in pairs(self.move_obj_list) do
- obj:Update()
- end
-
- self:CheckOuttimeCacheMode()
-
- end
-
- function MapView:Load( mapId, load_map_func, load_effect_finish )
- print("tanar: [MapView 420]=> Load: ",mapId)
- self.wait_clear_map = false
- local call_out_succeed = false
-
- local load_terrain_succeed = function()
- if call_out_succeed then
- return
- end
-
- self:DeletePreLoadMap()
-
- self.mapLoaded = true
- call_out_succeed = true
- load_map_func()
-
- self:ProcessSpecialModel()
- self:ProcessSkyModel()
-
- if not self.curResId then
- return
- end
-
- self.area_load_mode = true
-
- -- if MapView.NoDisibleLoadScene[tonumber(self.curResId)] then
- -- self.open_dynamic_visible_model = false
- -- else
- -- self.open_dynamic_visible_model = true
- -- end
-
- -- if SceneManager.Instance:IsStarFightScene() then
- -- self.open_dynamic_visible_model = false
- -- end
-
- if not SystemRuntimePlatform.IsIphone() then
- --使用全加载模式
- self.open_dynamic_visible_model = false
- end
-
-
-
- ShaderTools.ClearMaterialData()
- self:CheckCombineMiniModel()
- self:RegiestEffectList()
- --模型创建方式
- -- if not MapView.EnterSceneLoad[tonumber(self.curResId)] then
- -- if self.regiest_model_new_mode then
- -- self:RegiestModelListNew()
- -- else
- -- self:RegiestModelList()
- -- end
- -- end
- self:RegiestMoveObjList()
- self:RegiestAlphaModelList()
- self:RegisterElevatorModelList()
-
- load_effect_finish(1)
- --[[
- if not self.load_model_count or self.enter_scene_want_load_count == 0 then
- load_effect_finish(1)
- else
- self.load_effect_finish_func = load_effect_finish
- local timeout_finfish = function()
- if self.load_effect_finish_func then
- self.load_effect_finish_func(1)
- self.load_effect_finish_func = nil
- self.timeout_enter_scene = true
- SapManager.Instance:WaitLoadTerrainFinish(false)
- end
- end
- self.check_load_model_event = setTimeout(timeout_finfish,25)
- end
- ]]
-
- -- if not G_DEBUG_MODE then
- -- self:LoadSpiltModelList() --全加载
- self:RegiestModelListNew() --SAP
- -- end
- SapManager:getInstance():ForceCheckFarModelLoad()
-
- --新手场景特殊处理
- if self.curResId and self.curResId == 1001 then
- Shader.SetGlobalFloat("_GlobalSceneAlpha", 1.0)
- end
- end
-
- local load_finish = function( same_scene )
- -- if G_DEBUG_MODE then
- -- load_terrain_succeed()
- -- return
- -- end
-
- -- if Config.ConfigSceneWaveModel[self.curResId] then
- -- self:LoadWaterMaterial()
- -- end
-
- local load_scene_call_back
- load_scene_call_back = function(objs)
- if mapId ~= self.curMapId then
- return
- end
-
- if objs then
- self.async_load_map_obj = UnitySceneManager.LoadSceneAsync(self:GetLoadSceneRes(tostring(self.curResId)))
- self.async_load_map_obj.allowSceneActivation = true
- local load_into = function()
- if self.check_load_event then
- GlobalTimerQuest:CancelQuest(self.check_load_event)
- self.check_load_event = nil
- end
- if self.async_load_map_obj then
- self.async_load_map_obj = nil
- end
- load_terrain_succeed()
- end
-
- local try_load_time = 0
- local check_load = function()
- if self.async_load_map_obj then
- local progress = self.async_load_map_obj.progress
- --尝试加载资源去触发场景加载回调,别问
- if progress > 0.88 and Time.time - try_load_time > 1 then
- try_load_time = Time.time
- GlobalEventSystem:Fire(EventName.OPEN_WORLD_LEVEL_VIEW)
- GlobalEventSystem:Fire(EventName.CLOSE_WORLD_LEVEL_VIEW)
- end
- local max_progress = SystemRuntimePlatform.IsWindowsEditor() and 0.89 or 1
- if progress >= max_progress then
- load_into()
- elseif self.open_big_scene_mode then
- load_effect_finish(progress)
- end
-
- end
- end
-
- if self.check_load_event then
- GlobalTimerQuest:CancelQuest(self.check_load_event)
- end
- self.check_load_event = GlobalTimerQuest:AddPeriodQuest(check_load, 0.05, -1)
-
- local time_out = function()
- self.init_terrain_timeout_handle = nil
- if not call_out_succeed then
- self.load_terrain_timeout = true
- end
- print("tanar: MapView [525] =========== ")
- load_into()
- end
- self.init_terrain_timeout_handle = setTimeout(time_out,15)
- else
- local load_again = function()
- lua_resM:loadPrefabs(self.load_prefab_temp_target,"terrain_scene_" .. self:GetLoadSceneRes(self.curResId),{}, load_scene_call_back, false, ASSETS_LEVEL.HIGHT)
- end
- setTimeout(load_again,0.3)
- end
- end
-
- if not same_scene then
- lua_resM:loadPrefabs(self.load_prefab_temp_target,"terrain_scene_" .. self:GetLoadSceneRes(self.curResId),{}, load_scene_call_back, false, ASSETS_LEVEL.HIGHT)
- else
- setTimeout(load_terrain_succeed,0.1)
- end
-
- local time_out = function()
- self.load_terrain_timeout_handle = nil
- if not call_out_succeed then
- self.load_terrain_timeout = true
- end
- load_terrain_succeed()
- end
- self.load_terrain_timeout_handle = setTimeout(time_out,25)
- end
- self:LoadMapData(mapId, load_finish)
- end
-
- function MapView:LoadMapData( mapId, load_finish)
- self.curMapData = nil
-
- local load_call_back
- load_call_back = function(objs)
- if objs and objs[0] then
- local txt = objs[0]
- mapMgr:LoadMap(mapId,txt)
-
- local same_scene = false
- local newCurMapData = mapMgr:CurMap()
- if self.curResId == newCurMapData.resId then
- same_scene = true
- end
-
- if self.curResId then
- self:ClearData(same_scene)
- end
-
- self.curResId = newCurMapData.resId
- self.curMapData = newCurMapData
- self.curMapId = mapId
-
- self:CheckCombineModel()
-
- if self.scene_effect_container == nil then
- self.scene_effect_container = UiFactory.createChild(panelMgr:GetParent("SceneContainer"), UIType.EmptyObject, "effect_container")
- end
-
- if load_finish then
- load_finish(same_scene)
- load_finish = nil
- end
- else
- local loadagain = function()
- lua_resM:loadTextAsset(self.load_prefab_temp_target,"mapdata" .. mapId,tonumber(mapId),load_call_back,ASSETS_LEVEL.HIGHT)
- end
- setTimeout(loadagain,1)
- end
- end
- lua_resM:loadTextAsset(self.load_prefab_temp_target,"mapdata" .. mapId,tonumber(mapId),load_call_back,ASSETS_LEVEL.HIGHT)
-
- local check_load_finish = function()
- if load_finish then
- GameError.Instance:SendErrorToPHP("load map data error when want to change scene " .. mapId)
- end
- end
- self.load_mapdata_handle = setTimeout(check_load_finish,15)
- end
-
- --- area_type:AreaDataIndex
- function MapView:SetDynamicArea(area_id,area_type)
- if self.curMapData then
- --动态区域改变清理缓存
- self.zone_block = {}
- self.zone_type = {}
- self.curMapData:SetDynamicArea(area_id,area_type)
- end
- end
-
- function MapView:GetSceneCenterPos()
- if not self.curMapData then
- Debugger.LogWarning("GetSceneCenterPos when map not load")
- return Vector3(0,0,0)
- end
- return Vector3(self.curMapData.mapWidth/MainCamera.PixelsToUnits/2, self.curMapData.mapHeight/MainCamera.PixelsToUnits/2, 0)
- end
-
- function MapView:DetectFirstUnblockPoint(pos,dir,max_dist)
- if not self.curMapData then
- print(debug.traceback())
- Debugger.LogWarning("DetectFirstUnblockPoint when map not load")
- return nil
- end
-
- dir.y = -dir.y
- local p = self.curMapData:DetectFirstUnblockPoint(pos,dir,max_dist)
- return p
- end
-
- function MapView:FindWay(pos1,pos2,range)
- if not self.curMapData then
- print(debug.traceback())
- Debugger.LogWarning("FindWay when map not load")
- return nil
- end
-
- MapView.FindWayVector2One.x = pos1.x
- MapView.FindWayVector2One.y = pos1.y
- MapView.FindWayVector2Second.x = pos2.x
- MapView.FindWayVector2Second.y = pos2.y
-
- local objs = self.curMapData:FindWay(MapView.FindWayVector2One,MapView.FindWayVector2Second,range)
- if objs then
- local ret = {}
- for i=1,objs.Length do
- local ret_obj = co.TableXY(objs[objs.Length-i].x,objs[objs.Length-i].y)
- table.insert(ret,ret_obj)
- end
- return ret
- end
- return objs
- end
-
- function MapView:IsStraightLine(pos1,pos2)
- if not self.curMapData then
- print(debug.traceback())
- -- Debugger.LogWarning("IsStraightLine when map not load")
- return false
- end
-
- return self.curMapData:IsStraightLine(pos1,pos2)
- end
-
- function MapView:DetectLastUnblockPoint(pos,dir,dist,jump_state)
- if not self.curMapData then
- print(debug.traceback())
- -- Debugger.LogWarning("DetectLastUnblockPoint when map not load")
- return pos
- end
-
- --dir.y = -dir.y
-
- jump_state = false
-
- local point = nil
- point = self.curMapData:DetectLastUnblockPoint(pos,dir,dist,jump_state)
-
- return point
- end
-
- function MapView:GetZoneHeight(x, y)
- if not self.curMapData then
- return -1
- end
-
-
-
- x = math_floor(x)
- y = math_floor(y)
-
- local index = x .. "-" .. y
- local cache = self.zone_height[index]
- if cache then
- return cache
- end
-
- local height = self.curMapData:GetZoneHeight(x+1,y+1)/100
- self.zone_height[index] = height
-
- return height
- end
-
- function MapView:IsBlockXY(x, y)
- if not self.curMapData then
- return nil
- end
-
- x = math_floor(x)
- y = math_floor(y)
-
- local index = x .. "-" .. y
- local cache = self.zone_block[index]
- if cache ~= nil then
- return cache
- end
-
- local block = self.curMapData:IsBlock(x,y,false)
- self.zone_block[index] = block
- return block
- end
-
- -- AreaDataIndex:area_type
- function MapView:IsAreaType(x, y, area_type)
- if not self.curMapData then
- return false
- end
-
- -- if area_type == AreaDataIndex.JumpType then
- -- return false
- -- end
-
- x = math_floor(x)
- y = math_floor(y)
-
- local index = x .. "-" .. y .. "-" .. area_type
- local cache = self.zone_type[index]
- if cache ~= nil then
- return cache
- end
-
- local result = false
- local cur_type = self.curMapData:GetAreaType(x,y)
- if bit.band(cur_type,area_type) ~= 0 then
- result = true
- end
- self.zone_type[index] = result
- return result
- end
-
- function MapView:GetAreaType(x, y)
- if not self.curMapData then
- return
- end
-
- x = math_floor(x)
- y = math_floor(y)
- local index = x .. "-" .. y
- local _type = self.area_type_cache[index]
- if _type == nil then
- _type = self.curMapData:GetAreaType(x,y)
- self.area_type_cache[index] = _type
- end
- return _type
- end
-
- function MapView:PreLoadMapRes( scene_id, callback )
- if not scene_id then
- return
- end
-
- local func = function(res_id)
- if tonumber(res_id) == tonumber(self.curResId) then
- --前后场景地图资源一样不需走预加载
- if callback then
- callback()
- end
- return
- end
-
- self.preload_scene_id = res_id
- lua_resM:loadPrefabs(self.preload_prefab_temp_target,"terrain_scene_" .. self:GetLoadSceneRes(res_id),{}, callback, false, ASSETS_LEVEL.HIGHT)
- end
- self:GetResIDByScene( scene_id, func )
- end
-
- function MapView:DeletePreLoadMap()
- if self.preload_scene_id then
- lua_resM:clearReference(self.preload_prefab_temp_target)
- self.preload_scene_id = nil
- end
- end
-
- function MapView:ClearData(same_scene)
- self.action_obj_list = {}
- -- self:CancelFarModelTimer()
- self:UnRegiestEffectList()
- self:UnRegiestSpecialModelList()
- self:UnRegiestModelList()
- self:UnRegiestMoveObjList()
- self:UnRegiestAlphaModelList()
- self:UnRegiestElevatorModelList()
-
- self.mapLoaded = false
-
- for k,effect in pairs(self.effect_list) do
- effect:DeleteMe()
- end
- for k,v in pairs(self.specialModel_list) do
- v:DeleteMe()
- end
- for k,obj in pairs(self.move_obj_list) do
- obj:DeleteMe()
- end
-
- for k,v in pairs(MapView.WaveList) do
- MapView.WaveList[k] = false
- end
-
- self.effect_last_show_state = nil
- MainCamera.Instance:DestoryScreenEffectCamere()
-
- if not same_scene then
- lua_resM:clearReference(self.load_prefab_temp_target)
-
- self.material_ab_list = {}
- for k,cache_list in ipairs(self.model_cache_map) do
- for index,info in ipairs(cache_list) do
- destroy(info.obj)
- end
- end
- self.model_cache_map = {}
-
- for index,obj in ipairs(self.material_obj_list) do
- destroy(obj)
- end
- self.material_obj_list = {}
-
- for index,abname in ipairs(self.material_ab_list) do
- resMgr:UnloadAssetBundle(abname,true,1)
- end
-
- for index,obj in pairs(self.model_list) do
- destroy(obj)
- end
-
- for index,obj in pairs(self.model_root_map) do
- destroy(obj)
- end
-
- self.model_list = {}
- self.model_root_map = {}
- self.combine_mini_model = {}
- self.combine_model_state = false
- self.open_big_scene_mode = false
- self.model_parent = nil
- self.have_combine_model = {}
-
- if self.model_com_root then
- destroy(self.model_com_root)
- self.model_com_root = nil
- end
-
- local node = GameObject.Find("dongzuo")
- if node then
- node:SetActive(false)
- end
- end
-
- if self.curMapId then
- mapMgr:ClearMap(self.curMapId)
- end
-
- if self.load_mapdata_handle then
- GlobalTimerQuest:CancelQuest(self.load_mapdata_handle)
- self.load_mapdata_handle = nil
- end
-
- if self.check_load_model_event then
- GlobalTimerQuest:CancelQuest(self.check_load_model_event)
- self.check_load_model_event = nil
- end
-
- if self.bind_mainrole_move_event then
- GlobalTimerQuest:CancelQuest(self.bind_mainrole_move_event)
- self.bind_mainrole_move_event = nil
- end
-
- self.zone_block = {}
- self.zone_height = {}
- self.zone_type = {}
- self.area_type_cache = {}
-
- self.effect_list = {}
- self.specialModel_list = {}
- self.move_obj_list = {}
- self.model_id_res_map = {}
- self.has_water_effect = {}
- self.load_model_count = nil
- self.enter_scene_want_load_count = 0
- self.timeout_enter_scene = false
- self.load_terrain_timeout = false
-
- if self.load_terrain_timeout_handle then
- GlobalTimerQuest:CancelQuest(self.load_terrain_timeout_handle)
- self.load_terrain_timeout_handle = nil
- end
-
- if self.init_terrain_timeout_handle then
- GlobalTimerQuest:CancelQuest(self.init_terrain_timeout_handle)
- self.init_terrain_timeout_handle = nil
- end
-
- self.cache_effect_obj = {}
-
- if self.scene_effect_container then
- destroy(self.scene_effect_container)
- self.scene_effect_container = nil
- end
-
- if self.load_terrain_force_check_handle then
- TimerQuest.CancelQuest(GlobalTimerQuest, self.load_terrain_force_check_handle)
- self.load_terrain_force_check_handle = nil
- end
-
- self.regiest_model_finish = false
-
-
- end
-
- --全屏特效显示隐藏
- function MapView:UpdateFullScreenEffect( posx, posy )
- if IsTableEmpty(self.effect_list) then
- return
- end
- local cur_map_id = tonumber(self.curResId)
- --目前只有1001需要
- if cur_map_id and cur_map_id == 1001 then
- local hide_max_x, hide_max_y = 0, 29170 --超过这个边界需要隐藏
- local cur_show_state = true
- if (hide_max_x > 0 and posx > hide_max_x) or (hide_max_y > 0 and posy > hide_max_y) or self:IsAreaType(posx/SceneObj.LogicRealRatio.x, posy/SceneObj.LogicRealRatio.y, AreaDataIndex.IndoorType) then
- cur_show_state = false
- end
- if self.effect_last_show_state ~= nil and self.effect_last_show_state == cur_show_state then
- return
- end
- self.effect_last_show_state = cur_show_state
- for k,v in pairs(self.effect_list) do
- if v.fullScreen or v.customEffect then
- v:SetActive(cur_show_state)
- end
- end
- end
- end
-
- function MapView:RegiestEffectList()
- local scene_effect = Config.ConfigSceneEffect.EffectInfo[tonumber(self.curMapId)]
- local area_load = true
- if scene_effect then
- -- if SystemRuntimePlatform.IsIphone() then
- -- area_load = true
- -- end
- for effect_id,effect in pairs(scene_effect) do
- if area_load and not MapView.NoAreaLoadEffect[effect.name] then
- if not effect.disabled then
- if effect.fullScreen then
- self.effect_list[effect_id] = SceneEffect.New(effect,MainCamera:getInstance().camera_gameObject,tonumber(self.curMapId))
- self:RegiestMoveEvent()
- else
- effect.id = effect_id
- local obj =
- {
- id = effect_id,
- type = SapManager.ObjType.Effect,
- pos = co.TableXYZ(effect.x,effect.z,effect.y),
- bound_offset = co.TableXYZ(effect.bound.off_x * effect.effectScale_x,effect.bound.off_z * effect.effectScale_z, effect.bound.off_y * effect.effectScale_y),
- size = co.TableXY(effect.bound.size_x * effect.effectScale_x,effect.bound.size_z * effect.effectScale_z,effect.bound.size_y * effect.effectScale_y),
- data = {id = effect_id,obj = effect},
- }
- local custom_size = MapView.CustomEffectBox[effect.name]
- if custom_size then
- obj.size = co.TableXY(custom_size,custom_size,custom_size)
- end
- if self.area_load_mode then
- SapManager:getInstance():RegisterObj(obj)
- else
- self:CreateEffect(obj.data)
- end
- end
- end
- end
- end
- end
-
- local loadback = function(transform)
-
- local hide_effect = MapView.HideEffectScene[self.curMapId]
- if hide_effect then
- for effect_name,state in pairs(hide_effect) do
- local effect = transform:Find(effect_name)
- if effect then
- effect.gameObject:SetActive(false)
- end
- end
- end
-
- if not self.cache_effect_mode then
- SapManager.Instance:WaitLoadParticleFinish(false)
- return
- end
-
- if MapView.NoDisibleLoadScene[tonumber(self.curResId)] then
- SapManager.Instance:WaitLoadParticleFinish(false)
- return
- end
-
- if scene_effect and not IsNull(transform) then
- for effect_id,effect in pairs(scene_effect) do
- if not effect.obj_name then
- --旧版配置不支持
- SapManager.Instance:WaitLoadParticleFinish(false)
- return
- end
-
- effect.id = effect_id
- local obj =
- {
- id = effect_id,
- type = SapManager.ObjType.CacheEffect,
- pos = co.TableXYZ(effect.x,effect.z,effect.y),
- bound_offset = co.TableXYZ(effect.bound.off_x * effect.effectScale_x,effect.bound.off_z * effect.effectScale_z, effect.bound.off_y * effect.effectScale_y),
- size = co.TableXY(effect.bound.size_x * effect.effectScale_x,effect.bound.size_z * effect.effectScale_z,effect.bound.size_y * effect.effectScale_y),
- data = {id = effect_id,obj = effect},
- }
-
- local custom_size = MapView.CustomEffectBox[effect.name]
- if custom_size then
- obj.size = co.TableXY(custom_size,custom_size,custom_size)
- end
-
- SapManager:getInstance():RegisterObj(obj)
- end
-
- local length = transform.childCount
- if length > 0 then
- for i = 0,length -1 do
- local trans = transform:GetChild(i)
- if trans and trans.gameObject then
- trans.gameObject:SetActive(false)
- self.cache_effect_obj[trans.name] = trans.gameObject
- end
- end
- end
- end
-
- local next_frame = function()
- SapManager.Instance:WaitLoadParticleFinish(false)
- end
- setTimeout(next_frame,0.01)
- end
-
- if MapView.CustomEffect[tonumber(self.curResId)] then
- local effect_data = MapView.CustomEffect[tonumber(self.curResId)]
- local data = {
- id = self.curMapId,
- obj = effect_data,
- }
-
- if self.cache_effect_mode then
- SapManager.Instance:WaitLoadParticleFinish(true)
- end
- self.effect_list[data.id] = SceneEffect.New(data.obj,self.scene_effect_container,tonumber(self.curMapId),loadback)
- self.effect_last_show_state = nil
- end
- end
-
- function MapView:CreateCacheEffect( data )
- if data and data.obj then
- local name = data.obj.obj_name
- local game_object = self.cache_effect_obj[name]
- if game_object then
- game_object:SetActive(true)
- end
- end
- end
-
- function MapView:DeleteCacheEffect( name )
- if name then
- local game_object = self.cache_effect_obj[name]
- if game_object then
- game_object:SetActive(false)
- end
- end
- end
-
- function MapView:UnRegiestEffectList()
- if SystemMemoryLevel.Cur == SystemMemoryLevel.Low then
- -- return
- end
-
- if self.mapLoaded and self.area_load_mode then
- local scene_effect = Config.ConfigSceneEffect.EffectInfo[tonumber(self.curMapId)]
- if scene_effect then
- for effect_id,effect in pairs(scene_effect) do
- SapManager:getInstance():UnRegisterObj(SapManager.ObjType.Effect,effect_id)
- end
- end
- end
- end
-
- function MapView:CreateEffect( data )
- if not self.mapLoaded then
- LogError("want to create effect but map not load finfish, id = " .. data.id )
- return
- end
-
- if self.scene_effect_container then
- self.effect_list[data.id] = SceneEffect.New(data.obj,self.scene_effect_container,tonumber(self.curMapId))
- end
- end
-
- function MapView:RefreshEffect()
- if not self.mapLoaded then --特效设置为true就不走画质和帧率的再次刷新
- return
- end
-
- local scene_effect = Config.ConfigSceneEffect.EffectInfo[tonumber(self.curMapId)]
- if not scene_effect then
- return
- end
- local settingLv = lua_settingM:GetEffectLevel()
- for k,v in pairs(self.effect_list) do
- local config = scene_effect[k] or MapView.FullScreenEffect
- if config then
- if config.level <= settingLv then
- v:SetActive(true)
- else
- v:SetActive(false)
- end
- end
- end
- end
-
- function MapView:DeleteEffect( obj_id )
- local effect = self.effect_list[obj_id]
- if effect then
- effect:DeleteMe()
- self.effect_list[obj_id] = nil
- end
- end
-
- function MapView:RegiestSpecialModelList()
- if SystemMemoryLevel.Cur == SystemMemoryLevel.Low then
- return
- end
- local scene_effect = Config.ConfigSceneSpecialModel.SpecialModelInfo[tonumber(self.curMapId)]
- if scene_effect then
- for effect_id,effect in pairs(scene_effect) do
- effect.id = effect_id
- local obj =
- {
- id = effect_id,
- type = SapManager.ObjType.SpecialModel,
- pos = co.TableXYZ(effect.x,effect.z,effect.y),
- bound_offset = co.TableXYZ(effect.bound.off_x * effect.effectScale_x,effect.bound.off_z * effect.effectScale_z, effect.bound.off_y * effect.effectScale_y),
- size = co.TableXY(effect.bound.size_x * effect.effectScale_x,effect.bound.size_z * effect.effectScale_z,effect.bound.size_y * effect.effectScale_y),
- data = {id = effect_id,obj = effect},
- }
- local custom_size = MapView.CustomEffectBox[effect.name]
- if custom_size then
- obj.size = co.TableXY(custom_size,custom_size,custom_size)
- end
- if self.area_load_mode then
- SapManager:getInstance():RegisterObj(obj)
- else
- self:CreateEffect(obj.data)
- end
- end
- end
- end
-
- function MapView:UnRegiestSpecialModelList()
- if SystemMemoryLevel.Cur == SystemMemoryLevel.Low then
- return
- end
- if self.mapLoaded and self.area_load_mode then
- local scene_effect = Config.ConfigSceneSpecialModel.SpecialModelInfo[tonumber(self.curMapId)]
- if scene_effect then
- for effect_id,effect in pairs(scene_effect) do
- SapManager:getInstance():UnRegisterObj(SapManager.ObjType.SpecialModel,effect_id)
- end
- end
- end
- end
-
- function MapView:CreateSpecialModel( data )
- if not self.mapLoaded then
- LogError("want to create effect but map not load finfish, id = " .. data.id )
- return
- end
- if self.scene_effect_container then
- self.specialModel_list[data.id] = SceneEffect.New(data.obj,self.scene_effect_container,tonumber(self.curMapId))
- end
- end
-
- function MapView:DeleteSpecialModel( obj_id )
- local effect = self.specialModel_list[obj_id]
- if effect then
- effect:DeleteMe()
- self.specialModel_list[obj_id] = nil
- end
- end
-
- function MapView:RegiestMoveObjList()
- local obj_config = Config.ConfigSceneMoveObj[self.curResId]
- if obj_config then
- for index, data in ipairs(obj_config) do
- local pos = data.active_info.pos
- local osize = data.active_info.size
- local offset = data.active_info.offset
- local modelobj =
- {
- id = index,
- type = SapManager.ObjType.MoveObj,
- pos = co.TableXYZ(pos.x* MainCamera.PixelsToUnits, pos.y* MainCamera.PixelsToUnits, pos.z* MainCamera.PixelsToUnits),
- bound_offset = co.TableXYZ(offset.x* MainCamera.PixelsToUnits,offset.y* MainCamera.PixelsToUnits),
- size = co.TableXY(osize.x * MainCamera.PixelsToUnits,osize.y * MainCamera.PixelsToUnits),
- data = {id = index,obj = data},
- }
- SapManager:getInstance():RegisterObj(modelobj)
- end
- end
- end
-
- function MapView:UnRegiestMoveObjList()
- local obj_config = Config.ConfigSceneMoveObj[self.curResId]
- if obj_config then
- for index, data in ipairs(obj_config) do
- SapManager:getInstance():UnRegisterObj(SapManager.ObjType.MoveObj,index)
- end
- end
- end
-
- function MapView:CreateMoveObj( data )
- local obj = MoveObj.New( data,self.curMapId,self.scene_effect_container )
- obj:CreateModel()
-
- if not self.move_obj_list[data.id] then
- self.move_obj_list[data.id] = obj
- else
- LogError("want to create same moveobj id = " .. data.id )
- end
- end
-
- function MapView:DeleteMoveObj( index )
- local obj = self.move_obj_list[index]
- if obj then
- obj:DeleteMe()
- obj = nil
- end
- self.move_obj_list[index] = nil
- end
-
- function MapView:RegiestModelList()
- local model_root = GameObject.Find("splitmodel")
- local model_config = Config["model" .. self.curResId]
- if model_root and model_config then
- self.model_parent = model_root.transform
-
- SetGlobalPosition3D(self.model_parent,0, 0, 0)
- SetLocalScale(self.model_parent,1,1,1)
- self.model_parent.localEulerAngles = Vector3(0, 0, 0)
-
- self.load_model_count = 0
-
- for index, data in pairs(model_config) do
-
- local info = {
- id = index,
- obj = data,
- }
-
- if not self.area_load_mode or self.combine_mini_model[data[1]] then
- if not self.combine_model_state then
- self:CreateModel(info,self.model_parent)
- end
- elseif self:IsLocalFile(data[1]) then
- self:CreateModel(info,self.model_parent)
- else
- self:RegiestModel(info)
- end
- end
- end
-
- self.regiest_model_finish = true
- end
-
- function MapView:RegiestModel(info)
- local data = info.obj
- local index = info.id
- local is_far = false
- local pos_x = (data[3]) * MainCamera.PixelsToUnits
- local pos_y = (data[5]) * MainCamera.PixelsToUnits
- local pos_z = (data[4]) * MainCamera.PixelsToUnits
- local max_size = math.max(math.max(data[15],data[17]),data[16]) * MainCamera.PixelsToUnits * 3
- local bound_offset = co.TableXYZ(data[12]* MainCamera.PixelsToUnits,data[14]* MainCamera.PixelsToUnits, data[13]* MainCamera.PixelsToUnits)
- --远景包围盒适配
- local is_check_detail = false
- local check_type = false
- local offset = 0
- if data[4] < -1 and max_size < 2000 then
- is_check_detail = true
- else
- if Config.ConfigDetailMapViewCheckModel[self.curResId] then
- if Config.ConfigDetailMapViewCheckModel[self.curResId][data[2]] then
- is_check_detail = true
- check_type = Config.ConfigDetailMapViewCheckModel[self.curResId][data[2]].type
- end
- end
- end
-
- if is_check_detail then
- if check_type == 1 then
- if SystemMemoryLevel.Cur == SystemMemoryLevel.Hight then --高端机采用更精确算法
- pos_x = (data[3]) * MainCamera.PixelsToUnits
- pos_y = (data[4]) * MainCamera.PixelsToUnits
- pos_z = (data[5]) * MainCamera.PixelsToUnits
- is_far = true
-
- bound_offset = co.TableXYZ(data[12]* MainCamera.PixelsToUnits,data[13]* MainCamera.PixelsToUnits, data[14]* MainCamera.PixelsToUnits)
- else
- is_far = false
- max_size = max_size * 3
- bound_offset = co.TableXYZ(data[12]* MainCamera.PixelsToUnits,data[13]* MainCamera.PixelsToUnits, data[14]* MainCamera.PixelsToUnits + 2000)
- end
- elseif check_type == 2 then
- is_far = false
- max_size = max_size * 3
- bound_offset = co.TableXYZ(data[12]* MainCamera.PixelsToUnits,data[13]* MainCamera.PixelsToUnits, data[14]* MainCamera.PixelsToUnits + 2000)
- end
- end
-
-
- local modelobj =
- {
- id = index,
- type = SapManager.ObjType.Model,
- pos = co.TableXYZ(pos_x, pos_y, pos_z),
- -- rot = Quaternion.Euler(data[6], data[7], data[8]), --这是一个四元数
- bound_offset = bound_offset,
- size = co.TableXYZ(max_size,max_size,max_size),
- data = {id = index,obj = data},
- is_far = is_far
- }
-
- SapManager:getInstance():RegisterObj(modelobj)
- end
-
- function MapView:RegiestModelListNew()
- local model_root = GameObject.Find("splitmodel")
- local model_config = Config["model" .. self.curResId]
- if model_config then
-
- --场景基础资源包加载超时失败,改成挂在通用根节点
- if not model_root then
- model_root = GameObject.Find("root")
- end
- self.model_parent = model_root.transform
-
- SetGlobalPosition3D(self.model_parent,0, 0, 0)
- SetLocalScale(self.model_parent,1,1,1)
- self.model_parent.localEulerAngles = Vector3(0, 0, 0)
-
- self.load_model_count = 0
- SapManager.Instance:WaitLoadTerrainFinish(true)
- local same_res_map = {}
- for index, data in pairs(model_config) do
- if not MapView.NoLoadModel[data[1]] then
- local res = data[1]
- if not same_res_map[res] then
- same_res_map[res] = {}
- end
- table.insert(same_res_map[res],index)
- end
- end
-
- for res,list in pairs(same_res_map) do
- if not self.area_load_mode or self.combine_mini_model[res] then
- if not self.combine_model_state or (self.combine_mini_model[res] and self.open_dynamic_visible_model) then
- self:CreateModelList(res,list,model_config)
- end
- elseif self:IsLocalFile(res) then
- self.combine_mini_model[res] = true
- self:CreateModelList(res,list,model_config)
- else
- for key,index in pairs(list) do
- local info = {
- id = index,
- obj = model_config[index],
- }
- self:RegiestModel(info)
- end
- end
- end
- end
-
- self.regiest_model_finish = true
- end
-
- function MapView:CreateModelList(res,list,model_config)
- self.enter_scene_want_load_count = self.enter_scene_want_load_count + 1
-
- local cache_list = self.model_cache_map[res]
- local map_res = self.curResId
- local load_res = function( objs, cache )
- if objs and ( cache or objs[0]) and self.mapLoaded then
- if map_res ~= self.curResId then
- if not cache and objs[0] then
- destroy(objs[0])
- end
- return
- end
-
- for k,index in pairs(list) do
- local last_model = self.model_list[index]
- if not last_model then
- if cache then
- if #cache_list > 1 then
- local info = table.remove(cache_list,#cache_list)
- if info and not IsNull(info.obj) then
- info.obj:SetActive(true)
- self:InitObj( info.obj,nil,model_config[index],single_parent,index, res )
- end
- else
- if cache_list[1] and not IsNull(cache_list[1].obj) then
- cache_list[1].time = os.time()
- cache_list[1].obj:SetActive(true)
- self:InitObj( nil, cache_list[1].obj,model_config[index],single_parent,index, res )
- cache_list[1].obj:SetActive(false)
- end
- end
- else
- self:InitObj( nil,objs[0],model_config[index],single_parent,index, res )
- end
- end
- if self.open_dynamic_visible_model then
- local info = {
- id = index,
- obj = model_config[index],
- }
- self:RegiestModel(info)
- end
- end
- else
- print("------load res error--------",res)
- end
-
- self.load_model_count = (self.load_model_count or 0) + 1
-
- if self.support_model_combine then
- self:CombineModelList(res,list)
- end
-
- local next_frame = function()
- self:CheckTerrainLoadFinish()
- end
-
- if self.combine_model_state then
- setTimeout(next_frame,0.01)
- else
- next_frame()
- end
- end
-
- if cache_list then
- if #cache_list > 0 then
- load_res(true,true)
- return
- end
- end
- local ab_name = "terrain_prefab_" .. res
- lua_resM:loadPrefabs(self.load_prefab_temp_target,ab_name,res, load_res, true, ASSETS_LEVEL.NORMAL)
- end
-
- function MapView:InitObj( cache_model,obj,data,parent,id,model_name )
- local model = cache_model or newObject(obj)
- model.name = data[2]
- if parent then
- model.transform:SetParent(parent)
- end
- SetLocalScale(model.transform, data[9], data[10], data[11])
- model.transform.localEulerAngles = Vector3(data[6], data[7], data[8])
- SetGlobalPosition3D(model.transform,data[3], data[5], data[4])
- self:LoadModelLight(model,data)
-
- self.model_list[id] = model
- self.model_id_res_map[id] = model_name
- self.model_local_state[data[1]] = true
- end
-
- function MapView:CombineModelList(res,list)
- local single_parent = self:GetSingleParent(res)
- for k,v in pairs(list) do
- if not IsNull(self.model_list[v]) then
- self.model_list[v].transform:SetParent(single_parent)
- else
- logWarn("CombineModelList Error:" .. res)
- end
- end
- if self.combine_mini_model[res] and not self.combine_model_state and self.support_model_combine then
- local root = self.model_root_map[res]
- if not IsNull(root) then
- Util.StaticBatchingUtilityCombine(root)
- --GameError.Instance:SendErrorMsg("---CombineModelList---" .. res)
- -- GameError.Instance:SendErrorMsg("---CombineModelList---" .. res)
- end
- end
-
- if self.open_dynamic_visible_model then
- for k,index in pairs(list) do
- local model = self.model_list[index]
- if not IsNull(model) then
- model:SetActive(false)
-
- self.have_combine_model[index] = true
- else
- print("model is null:" .. res .. "-" .. index)
- end
- end
- end
- end
-
- function MapView:GetSingleParent(model_name)
- if not self.support_model_combine then
- return self.model_parent
- end
- local single_parent = self.model_root_map[model_name] or GameObject.Find("splitmodel/" .. model_name .. "_com")
- if self.load_terrain_timeout and not single_parent then
- single_parent = GameObject.Find("root/" .. model_name .. "_com")
- end
- if not single_parent then
- if IsNull(self.model_parent) then
- self.model_parent = GameObject.Find("root").transform
- end
- if IsNull(self.model_com_root) then
- self.model_com_root = UiFactory.createChild(self.model_parent, UIType.EmptyObject, "scene_model_root")
- end
- self.model_com_root.layer = LayerMask.NameToLayer("Default")
- local model_root = UiFactory.createChild(self.model_com_root.transform, UIType.EmptyObject, model_name .. "_com")
- model_root.layer = LayerMask.NameToLayer("Default")
- single_parent = model_root.transform
-
- SetGlobalPosition3D(single_parent,0, 0, 0)
- SetLocalScale(single_parent,1,1,1)
- single_parent.localEulerAngles = Vector3(0, 0, 0)
-
- if self.support_model_combine then
- self.model_root_map[model_name] = model_root
- end
- else
- if IsNull(single_parent) then
- single_parent = self.model_parent
- self.timeout_enter_scene = true
- else
- single_parent = single_parent.transform
- end
- end
- return single_parent
- end
-
- function MapView:CreateModel(info,parent)
- parent = parent or self.model_parent
- if not info or not parent then
- return
- end
-
- local visible_model = self.model_list[info.id]
- if not IsNull(visible_model) then
- visible_model:SetActive(true)
- return
- end
-
- self.enter_scene_want_load_count = self.enter_scene_want_load_count + 1
-
- local data = info.obj
- local model_name = data[1]
- local single_parent = self:GetSingleParent(model_name)
-
- local map_res = self.curResId
- local load_res = function( objs, cache )
- if objs and ( cache or objs[0]) and self.mapLoaded then
- if map_res ~= self.curResId then
- if cache then
- destory(objs)
- end
- return
- end
-
- if cache then
- objs:SetActive(true)
- self:InitObj(objs,nil,data,single_parent,info.id,model_name)
- else
- self:InitObj(nil,objs[0],data,single_parent,info.id,model_name)
- end
- else
- print("------load res error--------",model_name)
- end
-
- self.load_model_count = (self.load_model_count or 0) + 1
-
- local next_frame = function()
- self:CheckTerrainLoadFinish()
- end
-
- if self.combine_model_state then
- setTimeout(next_frame,0.01)
- else
- next_frame()
- end
- end
-
- local function load_call_back(objs, cache)
- local load = function()
- load_res(objs, cache)
- end
-
- --避免模型在缓存中时直接返回打乱模型注册流程,延迟一帧加载
- --setTimeout(load,0.01)
- load()
- end
-
- local ab_name = "terrain_prefab_" .. model_name
-
- local cache_list = self.model_cache_map[model_name]
- if cache_list then
- if #cache_list > 0 then
- local length = #cache_list
- local info = table.remove(cache_list,length)
- if info and not IsNull(info.obj) then
- load_call_back(info.obj,true)
- return
- end
- end
- end
-
- lua_resM:loadPrefabs(self.load_prefab_temp_target,ab_name,model_name, load_call_back, true, ASSETS_LEVEL.NORMAL)
- end
-
- function MapView:CheckTerrainLoadFinish()
- if self.regiest_model_finish and not self.timeout_enter_scene and self.load_effect_finish_func then
- if self.load_model_count >= self.enter_scene_want_load_count then
-
- --静态合批
- if not self.regiest_model_new_mode and self.support_model_combine and not self.combine_model_state then
- self:CombineModel()
- end
- self.combine_model_state = true
-
- --模型水效果
- local wave_info = Config.ConfigSceneWaveModel[self.curResId]
- if wave_info then
- for objname,data in pairs(wave_info) do
- self:LoadScreenWaveObj(objname,data.material,data.effect,data.add)
- end
- end
-
- --地图加载完成回调
- if self.load_effect_finish_func then
- self.load_effect_finish_func(1)
- self.load_effect_finish_func = nil
- end
-
- SapManager.Instance:WaitLoadTerrainFinish(false)
- else
- local per = self.load_model_count/self.enter_scene_want_load_count
- if self.load_effect_finish_func then
- self.load_effect_finish_func(per)
- end
-
- if per >= 0.95 and not self.load_terrain_force_check_handle and self.load_effect_finish_func then
- local cur_map = self.curResId
- local force_check = function()
- self.load_terrain_force_check_handle = nil
- if self.load_effect_finish_func and cur_map == self.curResId then
- self.load_effect_finish_func(1)
- self.load_effect_finish_func = nil
- SapManager.Instance:WaitLoadTerrainFinish(false)
- end
- end
- self.load_terrain_force_check_handle = setTimeout(force_check,5)
- end
- end
- end
- end
-
- function MapView:CombineModel()
- for name,root in pairs(self.model_root_map) do
- if self.combine_mini_model[name] then
- if not IsNull(root) then
- Util.StaticBatchingUtilityCombine(root)
- -- print("------combine_mini_model--------",name)
- else
- -- print("------StaticBatchingUtilityCombine empty root --------",name)
- end
- else
- -- print("------not combine_mini_model--------",name)
- end
- end
- end
-
- function MapView:LoadModelLight(model,data)
- if model.gameObject then
- local mesh = model.gameObject:GetComponentInChildren(typeof(UnityEngine.MeshRenderer)) or model.gameObject:GetComponentInChildren(typeof(UnityEngine.SkinnedMeshRenderer))
- if tonumber(data[26]) == 1 then
- mesh.lightmapIndex = tonumber(data[27])
- if not mesh.isPartOfStaticBatch then
- mesh.lightmapScaleOffset = Vector4(data[28],data[29],data[30],data[31])
- end
- self:ReplaceMaterial(mesh.sharedMaterial)
- mesh.gameObject.isStatic = true
- else
- self:ReplaceMaterial(mesh.sharedMaterial)
- mesh.gameObject.isStatic = false
- end
-
- -- local wave_info = Config.ConfigSceneWaveModel[self.curResId]
- -- if wave_info then
- -- local wave_data = wave_info[data[2]]
- -- if wave_data then
- -- self:LoadScreenWaveObj( data[2], wave_data.material,wave_data.effect,wave_data.add )
- -- end
- -- end
- end
- end
-
-
- function MapView:ProcessSpecialModel()
- local specObj = GameObject.Find("special")
- if specObj == nil then
- return
- end
-
- local childCount = specObj.transform.childCount
- for i = 0, childCount - 1 do
- local child = specObj.transform:GetChild(i)
- local mesh = child.gameObject:GetComponentInChildren(typeof(UnityEngine.MeshRenderer))
- if mesh ~= nil then
- self:ReplaceMaterial(mesh.sharedMaterial)
- end
- end
- end
-
- function MapView:ProcessSkyModel()
- local skyObj = GameObject.Find("Sky")
- if skyObj == nil then
- return
- end
-
- local childCount = skyObj.transform.childCount
- for i = 0, childCount - 1 do
- local child = skyObj.transform:GetChild(i)
- local mesh = child.gameObject:GetComponentInChildren(typeof(UnityEngine.MeshRenderer))
- if mesh ~= nil and mesh.sharedMaterial then
- self:ReplaceMaterial(mesh.sharedMaterial)
- --mesh.sharedMaterial.renderQueue = 2800
- end
- end
- end
-
- function MapView:ReplaceMaterial(mat)
- if mat == nil or mat.shader == nil then
- return
- end
-
- ShaderTools.ChangeMaterial(mat)
- end
-
-
- function MapView:DeleteModel(id)
- if not id then
- LogWarning("MapView DeleteModel ID is nil")
- return
- end
-
- local model = self.model_list[id]
- if self.have_combine_model[id] and not IsNull(model) then
- model:SetActive(false)
- return
- end
-
- if not IsNull(model) then
- local model_res = self.model_id_res_map[id]
- if model_res then
- if self.open_model_cache_state then
- if not self.model_cache_map[model_res] then
- self.model_cache_map[model_res] = {}
- end
- local info = {obj = model, time = os.time()}
- table.insert(self.model_cache_map[model_res],info)
-
- model:SetActive(false)
- else
- self:DestoryModel(model,model_res)
- end
- end
- end
- self.model_list[id] = nil
- end
-
-
- function MapView:DestoryModel(model,name)
- destroy(model)
- if self.open_abres_immediately_delete_mode then
- resMgr:UnloadAssetBundle("terrain_prefab_" .. name,true,1)
- end
- end
-
- function MapView:UnRegiestModelList()
- if self.mapLoaded then
- local model_root = GameObject.Find("splitmodel")
- local model_config = Config["model" .. self.curResId]
- if model_root and model_config then
- for id,obj in pairs(model_config) do
- if not self.combine_mini_model[obj[1]] or self.open_dynamic_visible_model then
- SapManager:getInstance():UnRegisterObj(SapManager.ObjType.Model,id)
- end
- end
- end
- end
- end
-
- function MapView:RegiestMoveEvent( )
- local onMainRoleMove = function(posx,posy)
- if not self.last_elevator_event_time or Time.time - self.last_elevator_event_time > 0.07 then
- self.last_elevator_event_time = Time.time
- self:UpdateElevatorModel(posx,posy)
- end
- if not self.last_move_event_time or Time.time - self.last_move_event_time > 0.3 then
- self.last_move_event_time = Time.time
- self:UpdateAlphaModel(posx,posy)
- self:UpdateFullScreenEffect(posx,posy)
- self:TriggerStory(posx,posy)
- end
- end
- if not self.bind_mainrole_move_event then
- self.bind_mainrole_move_event = GlobalEventSystem:Bind(ObjectEventType.MAINROLE_MOVE_EVENT_IMME,onMainRoleMove)
- end
- end
-
- function MapView:RegisterElevatorModelList( )
- local elevator_cfg = Config.ConfigSceneElevatorModel[self.curResId]
- if elevator_cfg then
- self:RegiestMoveEvent()
- self.elevator_vo_list = elevator_cfg
- --调试
- self:OnDebugElevatorMolde()
- end
- end
-
- function MapView:OnDebugElevatorMolde( )
- -- for k,vo in pairs(self.elevator_vo_list) do
- -- if vo.is_debug_show then
- -- self:CreateDebugConfigObj(k, vo)
- -- end
- -- end
- end
-
- function MapView:CreateDebugConfigObj( k, vo )
- local res = "mrsd_xuanzhong_001"
- self.debug_obj_list = self.debug_obj_list or {}
- local function load_call_back( objs, is_gameObject )
- if not objs or not objs[0] then
- return
- end
- local gameObject = is_gameObject and objs[0] or newObject(objs[0])
- local key = k..vo.obj_name
- gameObject.name = key
- self.debug_obj_list[key] = gameObject
- local scale = vo.range/140
- SetLocalScale(gameObject.transform, scale)
- gameObject.transform:SetParent(panelMgr:GetParent("SceneObjContainer").transform)
- SetGlobalPosition3D(gameObject.transform,vo.start_pos.x/100,vo.start_pos.y/100,vo.ele_start_pos.y)
- end
- lua_resM:loadPrefab(self, res, res, load_call_back, nil, ASSETS_LEVEL.LOW)
- end
-
- function MapView:UnRegiestElevatorModelList()
- self.elevator_vo_list = {}
- if self.debug_obj_list then
- for k,go in pairs(self.debug_obj_list) do
- destroy(go)
- go = nil
- end
- self.debug_obj_list = false
- end
- end
-
- function MapView:UpdateElevatorModel( posx, posy )
- if not self.elevator_vo_list or #self.elevator_vo_list == 0 then
- return
- end
- local main_role = Scene.Instance.main_role
- if not main_role then
- return
- end
- if main_role:IsInState(PoseState.ELEVATOR) or main_role:IsGhostMode() then
- return
- end
- local temp_elevator_vo = false
- local x, y = posx, posy
- for k,vo in pairs(self.elevator_vo_list) do
- local range = vo.range * vo.range
- if GameMath_GetDistance(x, y, vo.start_pos.x, vo.start_pos.y, false) <= range then
- temp_elevator_vo = vo
- break
- end
- end
- if temp_elevator_vo then
- main_role:DoElevator(temp_elevator_vo)
- return true
- end
- end
-
- function MapView:RegiestAlphaModelList()
- local info = Config.ConfigSceneAlphaModel[self.curResId]
- if info then
- self.alpha_model_list = {}
- for index,config in pairs(info) do
- local data = {
- task_list = config.task_list,
- name = config.name,
- minx = config.minx,
- miny = config.miny,
- maxx = config.maxx,
- maxy = config.maxy,
- alpha = config.alpha,
- time = config.time,
- obj = nil,
- destory = false,
- }
- table.insert(self.alpha_model_list,data)
- end
- self:RegiestMoveEvent()
- if RoleManager and RoleManager.Instance.mainRoleInfo then
- self:UpdateAlphaModel(RoleManager.Instance.mainRoleInfo.pos_x,RoleManager.Instance.mainRoleInfo.pos_y)
- end
- end
- end
-
- function MapView:UnRegiestAlphaModelList()
- for index,data in ipairs(self.alpha_model_list) do
- if data.obj then
- data.obj:DeleteMe()
- data.destory = true
- data.obj = nil
- end
- end
-
- self.alpha_model_list = {}
- end
-
- function MapView:UpdateAlphaModel(posx,posy)
- if #self.alpha_model_list > 0 then
- for index,data in pairs(self.alpha_model_list) do
- local is_task_math = true
- if data.task_list then
- is_task_math = TaskModel:getInstance():IsBetweenTaskListState(data.task_list)
- end
- if is_task_math then
- if data.minx < posx and data.maxx > posx and data.miny < posy and data.maxy > posy then
- if not data.obj then
- data.obj = AlphaObj.New(data.name,data.alpha,data.time)
- if data.obj.load_succeed then
- data.destory = false
- else
- data.obj:DeleteMe()
- data.obj = nil
- end
- end
- else
- if data.obj and not data.destory then
- local callback = function()
- if data.obj then
- data.obj:DeleteMe()
- data.obj = nil
- end
- end
- data.obj:HideEffect( callback )
- data.destory = true
- end
- end
- end
- end
- end
- end
-
- function MapView:TriggerStory(posx, posy)
- local scene_story_config = Config.Story[self.curMapId]
- if scene_story_config then
- local story_id = TaskModel:getInstance():GetTriggerStoryId()
- local story_cfg = scene_story_config[story_id]
- if story_cfg and story_cfg.trigger_range then
- local main_role = Scene.Instance.main_role
- if not main_role then
- return
- end
- local range = story_cfg.trigger_range * story_cfg.trigger_range
- if GameMath_GetDistance(posx, posy, story_cfg.trigger_pos.x, story_cfg.trigger_pos.y, false) <= range then
- main_role:DoStory(story_cfg)
- end
- end
- end
- end
-
- function MapView:LoadScreenWaveObj( objname, material, effect, add_mat )
- -- if self.has_water_effect[objname] then
- -- return
- -- end
-
- -- local obj = GameObject.Find("splitmodel/" .. objname) or GameObject.Find("special/" .. objname)
- -- if not obj then
- -- return
- -- end
-
- -- --组队副本不开水纹效果
- -- if SceneManager.Instance:IsTeamDungeonScene() then
- -- return
- -- end
-
- -- self.has_water_effect[objname] = true
-
- -- local mesh_renderer = obj:GetComponentInChildren(typeof(UnityEngine.MeshRenderer)) or game_object:GetComponentInChildren(typeof(UnityEngine.SkinnedMeshRenderer))
-
- -- if not add_mat then
- -- local ori_mat = MapView.WaveList[material]
- -- if not ori_mat then
- -- print("material not load succeed:" .. material)
- -- return
- -- end
-
- -- local mat = Material_New(ori_mat)
- -- mat:SetFloat("_Noise_Power", effect or Config.ConfigSceneWaveModel.DefaultWave)
- -- SetMaterialTexture(mat,GetMaterialTexture(mesh_renderer.material))
- -- mesh_renderer.material = mat
- -- mesh_renderer.material.renderQueue = 1999
-
- -- table.insert(self.material_obj_list,mat)
- -- else
- -- local mats = mesh_renderer.sharedMaterials
- -- local lua_mats = {}
- -- local mats_len = mats.Length
- -- local wave_index = nil
- -- for i = 0, mats_len - 1 do
- -- lua_mats[i + 1] = mats[i]
- -- if IsNull(mats[i]) or string_find(mats[i].name, material, 1, true) then
- -- wave_index = i + 1
- -- end
- -- end
-
- -- if not wave_index then
- -- wave_index = mats_len + 1
- -- end
-
- -- local wave_effect = lua_mats[wave_index]
- -- if not wave_effect then
- -- local ori_mat = MapView.WaveList[material]
- -- if not ori_mat then
- -- print("material not load succeed:" .. material)
- -- return
- -- end
-
- -- wave_effect = Material_New(ori_mat)
- -- wave_effect:SetFloat("_Noise_Power", effect or Config.ConfigSceneWaveModel.DefaultWave)
- -- lua_mats[wave_index] = wave_effect
- -- mesh_renderer.sharedMaterials = lua_mats
- -- mesh_renderer.material.renderQueue = 1999
-
- -- table.insert(self.material_obj_list,wave_effect)
- -- end
- -- end
- end
-
- function MapView:CheckOuttimeCacheMode()
- if os.time() - self.last_cache_model_check_time < 10 or SystemMemoryLevel.Cur == SystemMemoryLevel.Low then
- return
- end
- self.last_cache_model_check_time = os.time()
-
- for res,cache_list in pairs(self.model_cache_map) do
- for i = #cache_list,1,-1 do
- if os.time() - cache_list[i].time > 60 then
- local info = table.remove(cache_list,i)
- self:DestoryModel(info.obj,res)
- end
- end
- end
- end
-
- function MapView:ForceChangeMap( load_empty_map )
- local clear_map = function()
- self:ClearData()
- self.curMapId = nil
- self.curResId = nil
- end
-
- if load_empty_map and LoginModel.Instance.reconnect_on_game then
- local res = "empty"
- local load_call_back = function()
- if self.wait_clear_map then
- UnitySceneManager.LoadSceneAsync(res)
- clear_map()
-
- self.wait_clear_map = false
- end
- end
- self.wait_clear_map = true
- lua_resM:loadPrefabs(self.load_prefab_temp_target,"terrain_scene_" .. res,{}, load_call_back, true, ASSETS_LEVEL.HIGHT)
- else
- clear_map()
- end
- end
-
- function MapView:LoadWaterMaterial()
- --加载模型水纹材质
- for material,value in pairs(MapView.WaveList) do
- local ab_name = "terrain_material_" .. material
- local function callback(objs)
- if objs and objs[0] then
- MapView.WaveList[material] = objs[0]
- end
- end
- lua_resM:loadMateaial(self.load_prefab_temp_target,ab_name, material, callback, ASSETS_LEVEL.HIGHT)
- end
- end
-
- function MapView:CheckCombineMiniModel()
- if self.combine_model_state or not self.support_model_combine then
- return
- end
- if not self.curResId then
- return
- end
-
- local model_root = GameObject.Find("splitmodel")
- local model_config = Config["model" .. self.curResId]
- if model_root and model_config then
- local res_count_map = {}
- for index, data in pairs(model_config) do
- local resname = data[1]
- if not res_count_map[resname] then
- res_count_map[resname] = 0
- end
- res_count_map[resname] = res_count_map[resname] + 1
- end
-
- self.combine_mini_model = {}
- for resname,count in pairs(res_count_map) do
- if count > self.min_combine_count then
- self.combine_mini_model[resname] = true
- end
- end
- end
- end
-
- function MapView:IsLocalFile( res )
- --新手村地图全加载
- if MapView.AllLoadScene[self.curResId] then
- Scene.Instance.load_scene_timeout_max = true
- return true
- end
-
- do return false end
-
- if SystemRuntimePlatform.IsIphone() then
- return false
- end
-
- if SceneManager.Instance:IsStarFightScene() then
- Scene.Instance.load_scene_timeout_max = true
- return true
- end
-
- --角色第一次进场景全加载
- if Scene.Instance.is_first_enter_game or Scene.Instance.is_first_enter_scene then
- -- return true
- end
-
- if not self.support_model_combine then
- return false
- end
-
- if MapView.NoCombineModel[tonumber(self.curResId)] then
- return false
- end
-
- --关闭全加载
- if true then
- return false
- end
-
- if not AppConst.UpdateMode then
- return true
- end
-
- if tonumber(AppConst.EnglineVer) < 89 then
- return false
- end
-
- if self.model_local_state[res] then
- return true
- elseif self.model_local_state[res] == false then
- return false
- end
-
- local res_file = "rdata/terrain_prefab_" .. res
- local dir_str = "/client/unitybundle/"
- if SystemRuntimePlatform.IsIphone() then
- dir_str = "/client/iosbundle/"
- elseif SystemRuntimePlatform.IsAndroid() then
- dir_str = "/client/androidbundle/"
- end
-
- res_file = dir_str .. Util.GetAssetsBundlePath(res_file)
- if Util.FileNeedUpdate(res_file) then
- self.model_local_state[res] = false
- return false
- end
- return true
- end
-
- --设置屏蔽/非屏蔽特效
- function MapView:SetHideRefreshEffect(state)
- if not self.mapLoaded then
- return
- end
-
- local scene_effect = Config.ConfigSceneEffect.EffectInfo[tonumber(self.curMapId)]
- if not scene_effect then
- return
- end
-
- for k,v in pairs(self.effect_list) do
- local config = scene_effect[k] or MapView.FullScreenEffect
- if config then
- v:SetActive(not state)
- end
- end
- end
-
- function MapView:GetLoadSceneRes( res_id )
- if MapView.LoadBigScene[tonumber(res_id)] then
- self.open_big_scene_mode = true
- return res_id .. "_all"
- else
- return res_id
- end
- end
-
- -- --创建场景模型
- -- function MapView:LoadSpiltModelList( )
- -- local model_config = Config["model" .. self.curResId]
- -- if model_config then
-
- -- --场景基础资源包加载超时失败,改成挂在通用根节点
- -- -- local model_root = GameObject.Find("splitmodel")
- -- -- if not model_root then
- -- -- model_root = GameObject.Find("root")
- -- -- end
- -- -- self.model_parent = model_root.transform
-
- -- -- SetGlobalPosition3D(self.model_parent,0, 0, 0)
- -- -- SetLocalScale(self.model_parent,1,1,1)
- -- -- self.model_parent.localEulerAngles = Vector3(0, 0, 0)
-
- -- self.load_model_count = 0
- -- SapManager.Instance:WaitLoadTerrainFinish(true)
-
- -- --排序
- -- local temp_model_config = {}
- -- local main_pos = MainCamera:getInstance():GetCameraPos()
- -- if main_pos then
- -- main_pos.x = main_pos.x/100
- -- main_pos.y = main_pos.y/100
- -- for k,v in pairs(model_config) do
- -- v.key = k
- -- -- table.insert(temp_model_config, v)
- -- temp_model_config[#temp_model_config+1] = v
- -- end
- -- local sort_func = function(a,b)
- -- local di = GameMath.GetDistance(main_pos.x, main_pos.y, a[3], a[5])
- -- local dj = GameMath.GetDistance(main_pos.x, main_pos.y, b[3], b[5])
- -- return di < dj
- -- end
- -- table.sort(temp_model_config, sort_func)
- -- else
- -- temp_model_config = model_config
- -- end
-
- -- local near_same_res_map = {}
- -- local far_same_res_map = {}
- -- local near_max_index = 15
- -- local near_cur_index = 1
- -- self.enter_scene_want_load_count = 0
- -- for index, data in pairs(temp_model_config) do
- -- if near_cur_index <= near_max_index then
- -- if not near_same_res_map[data[1]] then
- -- near_same_res_map[data[1]] = {}
- -- self.enter_scene_want_load_count = self.enter_scene_want_load_count + 1
- -- near_cur_index = near_cur_index + 1
- -- end
- -- table.insert(near_same_res_map[data[1]], data.key)
- -- else
- -- if not far_same_res_map[data[1]] then
- -- far_same_res_map[data[1]] = {}
- -- self.enter_scene_want_load_count = self.enter_scene_want_load_count + 1
- -- end
- -- table.insert(far_same_res_map[data[1]], data.key)
- -- end
- -- end
-
- -- --创建近景
- -- for res,list in pairs(near_same_res_map) do
- -- self.combine_mini_model[res] = true
- -- self:OnLoadSplitModel(res,list,model_config)
- -- end
-
- -- --创建远景
- -- -- for res,list in pairs(far_same_res_map) do
- -- -- self.combine_mini_model[res] = true
- -- -- self:OnLoadSplitModel(res,list,model_config)
- -- -- end
-
- -- --分帧创建远景
- -- local far_step_res_map = {}
- -- for k,v in pairs(far_same_res_map) do
- -- local vo ={res = k, list = v}
- -- table.insert(far_step_res_map, vo)
- -- end
- -- self.far_model_index = 1
- -- local function on_period( )
- -- local vo = far_step_res_map[self.far_model_index]
- -- if vo then
- -- self.combine_mini_model[vo.res] = true
- -- self:OnLoadSplitModel(vo.res,vo.list,model_config)
- -- self.far_model_index = self.far_model_index + 1
- -- else
- -- self:CancelFarModelTimer()
- -- end
- -- end
- -- self:CancelFarModelTimer()
- -- self.on_far_model_timer = GlobalTimerQuest:AddPeriodQuest(on_period, 0.01)
- -- end
-
- -- self.regiest_model_finish = true
- -- end
-
- -- function MapView:CancelFarModelTimer( )
- -- if self.on_far_model_timer then
- -- GlobalTimerQuest:CancelQuest(self.on_far_model_timer)
- -- self.on_far_model_timer = nil
- -- end
- -- end
-
- -- function MapView:OnLoadSplitModel(res,list,model_config)
- -- local cache_list = self.model_cache_map[res]
- -- local map_res = self.curResId
- -- local load_res = function( objs, cache )
- -- if objs and ( cache or objs[0]) and self.mapLoaded then
- -- if map_res ~= self.curResId then
- -- if not cache and objs[0] then
- -- destroy(objs[0])
- -- end
- -- return
- -- end
- -- local single_parent = self:GetSingleParent(res)
- -- for k,index in pairs(list) do
- -- local last_model = self.model_list[index]
- -- if not last_model then
- -- if cache then
- -- if #cache_list > 1 then
- -- local info = table.remove(cache_list,#cache_list)
- -- if info and not IsNull(info.obj) then
- -- info.obj:SetActive(true)
- -- self:InitObj( info.obj,nil,model_config[index],single_parent,index, res )
- -- end
- -- else
- -- if cache_list[1] and not IsNull(cache_list[1].obj) then
- -- cache_list[1].time = os.time()
- -- cache_list[1].obj:SetActive(true)
- -- self:InitObj( nil, cache_list[1].obj,model_config[index],single_parent,index, res )
- -- cache_list[1].obj:SetActive(false)
- -- end
- -- end
- -- else
- -- self:InitObj( nil,objs[0],model_config[index],single_parent,index, res )
- -- end
- -- end
- -- end
- -- else
- -- print("------load res error--------",res)
- -- end
-
- -- self.load_model_count = (self.load_model_count or 0) + 1
-
- -- if self.support_model_combine then
- -- self:CombineModelList(res,list)
- -- end
-
- -- local next_frame = function()
- -- self:OnSplitModelFinish()
- -- end
-
- -- if self.combine_model_state then
- -- setTimeout(next_frame,0.01)
- -- else
- -- next_frame()
- -- end
- -- end
-
- -- if cache_list then
- -- if #cache_list > 0 then
- -- load_res(true,true)
- -- return
- -- end
- -- end
-
- -- local ab_name = "terrain_prefab_" .. res
- -- lua_resM:loadPrefab(self.load_prefab_temp_target,ab_name,res, load_res, false, ASSETS_LEVEL.NORMAL)
- -- end
-
- -- function MapView:OnSplitModelFinish( )
- -- if self.load_model_count and self.enter_scene_want_load_count and self.load_model_count >= self.enter_scene_want_load_count then
- -- --静态合批
- -- if self.support_model_combine and not self.combine_model_state then
- -- self:CombineModel()
- -- end
- -- self.combine_model_state = true
-
- -- SapManager.Instance:WaitLoadTerrainFinish(false)
- -- end
- -- end
-
- function MapView:ResetSceneActionObjHeight( )
- -- local cfg = Config.ConfigSceneElevatorModel[self.curMapId]
- -- if not cfg then
- -- return
- -- end
- -- for index, vo in pairs(cfg) do
- -- local obj = self:GetSceneActionObj(vo.obj_name)
- -- if not IsNull(obj) then
- -- SetGlobalPositionY(obj.transform, vo.obj_start_y)
- -- if obj.activeSelf == false then
- -- obj:SetActive(true)
- -- end
- -- end
- -- end
- end
-
- function MapView:GetSceneActionObj( obj_name )
- if not obj_name or obj_name == "" then
- return
- end
- self.action_obj_list = self.action_obj_list or {}
- if self.action_obj_list[obj_name] then
- return self.action_obj_list[obj_name]
- end
- local obj = GameObject.Find(obj_name)
- if not IsNull(obj) then
- self.action_obj_list[obj_name] = obj
- return obj
- end
- end
-
- function MapView:ObjectPlayAction( obj_name, action_name )
- local obj = self:GetSceneActionObj(obj_name)
- if not IsNull(obj) then
- local animator = obj:GetComponent(typeof(UnityEngine.Animator))
- if animator then
- animator:CrossFade(action_name,0)
- end
- end
- end
|