public SubSceneJob(RegionBase region, eSubSceneMode subSceneMode, eSubSceneType subSceneType, eSubSceneJobType jobType, Action <SubSceneJob> callback) { Region = region; SubSceneMode = subSceneMode; SubSceneType = subSceneType; JobType = jobType; Callback = callback; }
private void Update() { if (!isInitialized) { Debug.Log("d"); return; } var cameraTransform = Camera.main.transform; var cameraPos = cameraTransform.position; var teleportPositions = new List<Vector3>(); var halfSize = worldSize * 0.5f; //*********************************************** //identifying teleport positions if (cameraPos.y > halfSize.y - preTeleportOffset) { teleportPositions.Add(cameraPos + new Vector3(0, -worldSize.y, 0)); } else if (cameraPos.y < -halfSize.y + preTeleportOffset) { teleportPositions.Add(cameraPos + new Vector3(0, worldSize.y, 0)); } if (cameraPos.z > halfSize.z - preTeleportOffset) { teleportPositions.Add(cameraPos + new Vector3(0, 0, -worldSize.z)); } else if (cameraPos.z < -halfSize.z + preTeleportOffset) { teleportPositions.Add(cameraPos + new Vector3(0, 0, worldSize.z)); } //*********************************************** //updating one super region, getting a list of new jobs var newJobs = superRegionsList[currentSuperRegionIndex].UpdateSuperRegion(cameraTransform, teleportPositions); currentSuperRegionIndex++; if (currentSuperRegionIndex == superRegionsList.Count) { currentSuperRegionIndex = 0; } //*********************************************** //cleaning and updating the list of SubSceneJobs foreach (var job in newJobs) { eSubSceneJobType oppositeJobType = job.JobType == eSubSceneJobType.Load ? eSubSceneJobType.Unload : eSubSceneJobType.Load; int indexOfOppositeJob = subSceneJobsList.FindIndex( item => item.Region.Id == job.Region.Id && item.JobType == oppositeJobType && item.SubSceneMode == job.SubSceneMode && item.SubSceneType == job.SubSceneType ); if (indexOfOppositeJob >= 0) { subSceneJobsList.RemoveAt(indexOfOppositeJob); } } foreach (var job in newJobs) //this is temporarily in its own loop, will change when/if priorities are added { subSceneJobsList.Add(job); } //*********************************************** //executing jobs if (!isJobRunning && subSceneJobsList.Count != 0) { var newJob = subSceneJobsList[0]; subSceneJobsList.RemoveAt(0); switch (newJob.JobType) { case eSubSceneJobType.Load: StartCoroutine(LoadSubSceneCR(newJob)); break; case eSubSceneJobType.Unload: StartCoroutine(UnloadSubSceneCR(newJob)); break; } } } //end of Update()