public void LookUpForDepends( IsoScreenSolver screen_solver, IsoObject iso_object) { _isoObject = iso_object; if (iso_object.Internal.QTItem != null) { screen_solver._quadTree.VisitItemsByItem( iso_object.Internal.QTItem, this); } _isoObject = null; }
// --------------------------------------------------------------------- // // PlaceVisibles // // --------------------------------------------------------------------- void PlaceVisibles(IsoWorld iso_world, IsoScreenSolver screen_solver) { var step_depth = iso_world.stepDepth; var start_depth = iso_world.startDepth; var cur_visibles = screen_solver.curVisibles; for (int i = 0, e = cur_visibles.Count; i < e; ++i) { start_depth = RecursivePlaceIsoObject( cur_visibles[i], step_depth, start_depth); } }
// --------------------------------------------------------------------- // // Functions // // --------------------------------------------------------------------- public bool StepSortingAction(IsoWorld iso_world, IsoScreenSolver screen_solver) { Profiler.BeginSample("IsoSortingSolver.ResolveVisibles"); var dirty = ResolveVisibles(screen_solver); Profiler.EndSample(); if (dirty) { Profiler.BeginSample("IsoSortingSolver.PlaceVisibles"); PlaceVisibles(iso_world, screen_solver); Profiler.EndSample(); } return(dirty); }
public void LookUpForVisibility(IsoScreenSolver screen_solver, bool include_scene_view) { _screenSolver = screen_solver; _screenSolver._oldVisibles.Clear(); var cam_count = FillLookUpCameras(include_scene_view); for (var i = 0; i < cam_count; ++i) { var tmp_cam = _tmpCameras[i]; var vp_rect = tmp_cam.rect; var wrl_min = tmp_cam.ViewportToWorldPoint(new Vector3(vp_rect.xMin, vp_rect.yMin)); var wrl_max = tmp_cam.ViewportToWorldPoint(new Vector3(vp_rect.xMax, vp_rect.yMax)); _screenSolver._quadTree.VisitItemsByBounds(new IsoRect(wrl_min, wrl_max), this); } ResetLookUpCameras(); _screenSolver = null; }
// --------------------------------------------------------------------- // // ResolveVisibles // // --------------------------------------------------------------------- bool ResolveVisibles(IsoScreenSolver screen_solver) { var mark_dirty = false; var old_visibles = screen_solver.oldVisibles; var cur_visibles = screen_solver.curVisibles; for (int i = 0, e = cur_visibles.Count; i < e; ++i) { var iso_object = cur_visibles[i]; if (iso_object.Internal.Dirty) { screen_solver.SetupIsoObjectDepends(iso_object); iso_object.Internal.Dirty = false; mark_dirty = true; } if (iso_object.renderersMode == IsoObject.RenderersMode.Mode3d) { if (UpdateIsoObjectBounds3d(iso_object)) { mark_dirty = true; } } } for (int i = 0, e = old_visibles.Count; i < e; ++i) { var iso_object = old_visibles[i]; if (!cur_visibles.Contains(iso_object)) { screen_solver.ClearIsoObjectDepends(iso_object); iso_object.Internal.Dirty = true; mark_dirty = true; } } _tmpRenderers.Clear(); return(mark_dirty); }