Пример #1
0
        public StreamSceneOCController(OCParam param)
        {
            OcclusionRunningState.HasPVSData       = true;
            OcclusionRunningState.OcclusionEnabled = SharedConfig.EnableCustomOC;

            _param = param as StreamOCParam;
            _scene = new MultiScene(String.Empty, _param.TerrainNamePattern, _param.TerrainDimension, _param.TerrainSize, _param.OCData);
            _param.LevelManager.AfterGoLoaded    += OnGoLoad;
            _param.LevelManager.BeforeGoUnloaded += OnGoUnload;

            _pvsStats = new PVSStat[_param.TerrainDimension, _param.TerrainDimension];
            for (int i = 0; i < _param.TerrainDimension; ++i)
            {
                for (int j = 0; j < _param.TerrainDimension; ++j)
                {
                    var stat = new PVSStat()
                    {
                        Center    = new Vector2(i + 0.5f, j + 0.5f),
                        SceneName = String.Format(_param.TerrainNamePattern, i, j),
                        Status    = PVSStatus.UnLoaded
                    };

                    _pvsStats[i, j] = stat;
                }
            }

            UpdatePVSCache(_param.InitPosition, true);
        }
        public FixedSceneOCController(OCParam param)
        {
            OcclusionRunningState.HasPVSData       = true;
            OcclusionRunningState.OcclusionEnabled = SharedConfig.EnableCustomOC;

            _param = param as FixedOCParam;
            _scene = new SingleScene(String.Empty, _param.SceneName, Index.InValidIndex);
            _scene.Load(_param.OCData, false);
        }
        public InitOcclusionCullingControllerSystem(ISessionState sessionState, Contexts contexts)
        {
            _contexts     = contexts;
            _sessionState = sessionState;
            _sessionState.CreateExitCondition(typeof(InitOcclusionCullingControllerSystem));


            var mapDesc = SingletonManager.Get <MapsDescription>();

            _levelType = mapDesc.CurrentLevelType;
            switch (_levelType)
            {
            case LevelType.SmallMap:
                _ocDataAssetInfo = new AssetInfo(OCDataAssetBundleName, mapDesc.SmallMapParameters.AssetName + "_oc");
                _ocParam         = new FixedOCParam()
                {
                    OCData    = null,
                    SceneName = mapDesc.SmallMapParameters.AssetName,
                };
                break;

            case LevelType.BigMap:
                _ocDataAssetInfo = new AssetInfo(OCDataAssetBundleName, String.Format(mapDesc.BigMapParameters.TerrainNamePattern, "oc", "oc") + "_oc");
                var initPosition = _contexts.session.commonSession.InitPosition;

                _ocParam = new StreamOCParam()
                {
                    OCData             = null,
                    InitPosition       = initPosition,
                    TerrainMin         = mapDesc.BigMapParameters.TerrainMin,
                    TerrainDimension   = mapDesc.BigMapParameters.TerrainDimension,
                    TerrainSize        = mapDesc.BigMapParameters.TerrainSize,
                    TerrainNamePattern = mapDesc.BigMapParameters.TerrainNamePattern,

                    UnloadRadiusInGrid = 2f,
                    LoadRadiusInGrid   = 1.5f,

                    LevelManager = _contexts.session.commonSession.LevelManager,
                };
                break;

            default:
                _ocDataAssetInfo = AssetInfo.EmptyInstance;
                break;
            }
        }
        public static IOcclusionCullingController CreateController(LevelType levelType, OCParam param)
        {
            if (param.OCData != null)
            {
                switch (levelType)
                {
                case LevelType.SmallMap:
                    return(new FixedSceneOCController(param));

                case LevelType.BigMap:
                    return(new StreamSceneOCController(param));
                }
            }

            return(new DummyOCController());
        }