Axiom.Components.Paging.PagedWorldSection.HoldPage C# (CSharp) Метод

HoldPage() публичный Метод

Ask for a page to be kept in memory if it's loaded.
public HoldPage ( PageID pageID ) : void
pageID PageID
Результат void
        public virtual void HoldPage(PageID pageID)
        {
            Page page;
            if (mPages.TryGetValue(pageID, out page))
                page.Touch();
        }
        /// <summary>

Usage Example

Пример #1
0
        public override void NotifyCamera(Camera cam, PagedWorldSection section)
        {
            var stratData = (Grid2DPageStrategyData)section.StrategyData;

            Vector3 pos     = cam.DerivedPosition;
            Vector2 gridpos = Vector2.Zero;

            stratData.ConvertWorldToGridSpace(pos, ref gridpos);
            int x, y;

            stratData.DetermineGridLocation(gridpos, out x, out y);

            Real loadRadius = stratData.LoadRadiusInCells;
            Real holdRadius = stratData.HoldRadiusInCells;
            //scan the whole hold range
            Real fxmin = (Real)x - holdRadius;
            Real fxmax = (Real)x + holdRadius;
            Real fymin = (Real)y - holdRadius;
            Real fymax = (Real)y + holdRadius;

            int xmin = stratData.CellRangeMinX;
            int xmax = stratData.CellRangeMaxX;
            int ymin = stratData.CellRangeMinY;
            int ymax = stratData.CellRangeMaxY;

            // Round UP max, round DOWN min
            xmin = fxmin < xmin ? xmin : (int)System.Math.Floor(fxmin);
            xmax = fxmax > xmax ? xmax : (int)System.Math.Ceiling(fxmax);
            ymin = fymin < ymin ? ymin : (int)System.Math.Floor(fymin);
            ymax = fymax > ymax ? ymax : (int)System.Math.Ceiling(fymax);
            // the inner, active load range
            fxmin = (Real)x - loadRadius;
            fxmax = (Real)x + loadRadius;
            fymin = (Real)y - loadRadius;
            fymax = (Real)y + loadRadius;
            // Round UP max, round DOWN min
            int loadxmin = fxmin < xmin ? xmin : (int)System.Math.Floor(fxmin);
            int loadxmax = fxmax > xmax ? xmax : (int)System.Math.Ceiling(fxmax);
            int loadymin = fymin < ymin ? ymin : (int)System.Math.Floor(fymin);
            int loadymax = fymax > ymax ? ymax : (int)System.Math.Ceiling(fymax);

            for (int cy = ymin; cy <= ymax; ++cy)
            {
                for (int cx = xmin; cx <= xmax; ++cx)
                {
                    PageID pageID = stratData.CalculatePageID(cx, cy);
                    if (cx >= loadxmin && cx <= loadxmax && cy >= loadymin && cy <= loadymax)
                    {
                        // in the 'load' range, request it
                        section.LoadPage(pageID);
                    }
                    else
                    {
                        // in the outer 'hold' range, keep it but don't actively load
                        section.HoldPage(pageID);
                    }
                    // other pages will by inference be marked for unloading
                }
            }
        }
All Usage Examples Of Axiom.Components.Paging.PagedWorldSection::HoldPage