public static void Update() { var addedScenes = new List <WorldScene>(); List <Scene> newScenes; try { newScenes = ZetaDia.Scenes.Where( s => s.IsAlmostValid() && !CurrentWorldSceneIds.Contains(s.GetSceneNameString())).ToList(); } catch (NullReferenceException) { return; } catch (Exception ex) { if (ex.Message.Contains("ReadProcessMemory")) { return; } throw; } foreach (var scene in newScenes) { try { if (!scene.IsAlmostValid()) { continue; } if (scene.IsAlmostValid() && scene.Mesh.ParentSceneId <= 0 && scene.Mesh.DynamicWorldId == ZetaDia.CurrentWorldDynamicId && !scene.Name.ToLowerInvariant().Contains("fill")) { var adventurerScene = new WorldScene(scene); if (adventurerScene.Cells.Count > 0) { CurrentWorldScenes.Add(adventurerScene); addedScenes.Add(adventurerScene); } } CurrentWorldSceneIds.Add(scene.GetSceneNameString()); } catch (NullReferenceException) { } } if (addedScenes.Count > 0) { //Logger.Debug("[ScenesStorage] Found {0} new scenes", addedScenes.Count); var nodes = addedScenes.SelectMany(s => s.Nodes).ToList(); TrinityGrid.Instance.Update(nodes); } }
public static void Update() { var addedScenes = new List<WorldScene>(); List<Scene> newScenes; try { newScenes = ZetaDia.Scenes.Where( s => s.IsAlmostValid() && !CurrentWorldSceneIds.Contains(s.GetSceneNameString())).ToList(); } catch (NullReferenceException) { return; } catch (Exception ex) { if (ex.Message.Contains("ReadProcessMemory")) { return; } throw; } foreach (var scene in newScenes) { try { if (!scene.IsAlmostValid()) continue; if (scene.IsAlmostValid() && scene.Mesh.ParentSceneId <= 0 && scene.Mesh.DynamicWorldId == ZetaDia.CurrentWorldDynamicId && !scene.Name.ToLowerInvariant().Contains("fill")) { var adventurerScene = new WorldScene(scene); if (adventurerScene.Cells.Count > 0) { CurrentWorldScenes.Add(adventurerScene); addedScenes.Add(adventurerScene); } } CurrentWorldSceneIds.Add(scene.GetSceneNameString()); } catch (NullReferenceException) { } } if (addedScenes.Count > 0) { //Logger.Debug("[ScenesStorage] Found {0} new scenes", addedScenes.Count); var nodes = addedScenes.SelectMany(s => s.Nodes).ToList(); TrinityGrid.Instance.Update(nodes); } }
public WorldScene(Scene scene) { //using (new PerformanceLogger("[WorldScene] ctor", false)) //{ // Logger.Debug("[WorldScene] Scene GridSquare Size: {0} X:{1} Y:{2}", scene.Mesh.Zone.NavZoneDef.GridSquareSize,scene.Mesh.Zone.NavZoneDef.NavGridSquareCountX, scene.Mesh.Zone.NavZoneDef.NavGridSquareCountY); Scene = scene; Name = scene.Name; HashName = scene.GetSceneNameString(); LevelAreaId = Scene.Mesh.LevelAreaSNO; Min = Scene.Mesh.Zone.ZoneMin; Max = Scene.Mesh.Zone.ZoneMax; Center = (Max + Min) / 2; //Rect = new Rect(new Point(Center.X, Center.Y), new Size(_boxSize, _boxSize)); HasChild = Scene.Mesh.SubSceneId > 0; HasParent = Scene.Mesh.ParentSceneId > 0; DynamicWorldId = Scene.Mesh.DynamicWorldId; SceneId = scene.Mesh.SceneId; if (HasChild) { SubScene = new WorldScene(Scene.Mesh.SubScene); if (SubScene.HasChild) { //Logger.Error("[ScenesStorage] Found sub sub scene!!!"); SubScene.SubScene = new WorldScene(SubScene.Scene.Mesh.SubScene); } } //Logger.Verbose("[WorldScene] Created a new world scene. Name: {0} LevelArea: {1} ({2})", Name, (SNOLevelArea)LevelAreaId, LevelAreaId); //if (LevelAreaId != AdvDia.CurrentLevelAreaId && !ExplorationData.OpenWorldIds.Contains(AdvDia.CurrentWorldId)) //{ // Logger.Verbose("[WorldScene] The scene LevelAreaID is different than the CurrentLevelAreaID"); // Logger.Verbose("[WorldScene] Scene Name: {0}", Name); // Logger.Verbose("[WorldScene] Scene: {0} ({1})", (SNOLevelArea)LevelAreaId, LevelAreaId); // Logger.Verbose("[WorldScene] Current: {0} ({1})", (SNOLevelArea)AdvDia.CurrentLevelAreaId, AdvDia.CurrentLevelAreaId); //} CreateGrid(); //} }