예제 #1
0
 public ActorApi(LevelHandler levelHandler)
 {
     this.levelHandler = levelHandler;
 }
예제 #2
0
        public LevelRenderSetup(LevelHandler levelHandler)
        {
            this.levelHandler = levelHandler;

            // Shaders
            ContentRef <DrawTechnique> lightingShader      = ContentResolver.Current.RequestShader("Lighting");
            ContentRef <DrawTechnique> lightingNoiseShader = ContentResolver.Current.RequestShader("LightingNoise");

            downsampleShader = ContentResolver.Current.RequestShader("Downsample");
            blurShader       = ContentResolver.Current.RequestShader("Blur");

            combineSceneShader      = ContentResolver.Current.RequestShader("CombineScene");
            combineSceneWaterShader = ContentResolver.Current.RequestShader("CombineSceneWater");

            try {
                switch (Settings.Resize)
                {
                default:
                case Settings.ResizeMode.None:
                    resizeShader = DrawTechnique.Solid;
                    break;

                case Settings.ResizeMode.HQ2x:
                    resizeShader = ContentResolver.Current.RequestShader("ResizeHQ2x");
                    break;

                case Settings.ResizeMode.xBRZ3:
                    resizeShader = ContentResolver.Current.RequestShader("Resize3xBRZ");
                    break;

                case Settings.ResizeMode.xBRZ4:
                    resizeShader = ContentResolver.Current.RequestShader("Resize4xBRZ");
                    break;

                case Settings.ResizeMode.CRT:
                    resizeShader = ContentResolver.Current.RequestShader("ResizeCRT");
                    break;
                }
            } catch {
                resizeShader = DrawTechnique.Solid;
            }

            // Main texture
            mainTexture   = new Texture(null, TextureSizeMode.NonPowerOfTwo, TextureMagFilter.Nearest, TextureMinFilter.Nearest);
            normalTexture = new Texture(null, TextureSizeMode.NonPowerOfTwo, TextureMagFilter.Nearest, TextureMinFilter.Nearest, format: TexturePixelFormat.Rgb);
            mainTarget    = new RenderTarget(AAQuality.Off, /*true*/ false, mainTexture, normalTexture);

            // Lighting texture
            lightingTexture = new Texture(null, TextureSizeMode.NonPowerOfTwo, TextureMagFilter.Nearest, TextureMinFilter.Nearest, format: TexturePixelFormat.Dual);
            lightingTarget  = new RenderTarget(AAQuality.Off, false, lightingTexture);

            finalTexture = new Texture(null, TextureSizeMode.NonPowerOfTwo, TextureMagFilter.Nearest, TextureMinFilter.Nearest);
            finalTarget  = new RenderTarget(AAQuality.Off, false, finalTexture);

            // Noise texture
            noiseTexture = ContentResolver.Current.RequestGraphicResource("_custom/noise.png").Texture;

            // Materials
            lightingMaterial = new Material(lightingShader, ColorRgba.White);
            lightingMaterial.Res.SetTexture("normalBuffer", normalTexture);

            lightingNoiseMaterial = new Material(lightingNoiseShader, ColorRgba.White);
            lightingNoiseMaterial.Res.SetTexture("normalBuffer", normalTexture);
            lightingNoiseMaterial.Res.SetTexture("noiseTex", noiseTexture);

            // Render steps
            AddRenderStep(RenderStepPosition.Last, new RenderStep {
                MatrixMode        = RenderMatrix.WorldSpace,
                VisibilityMask    = VisibilityFlag.AllGroups,
                ClearFlags        = ClearFlag.All,
                DefaultClearColor = true,

                Output = mainTarget
                         //Output = finalTarget
            });

            AddRenderStep(RenderStepPosition.Last, new RenderStep {
                Id = "CombineScene",

                MatrixMode     = RenderMatrix.ScreenSpace,
                VisibilityMask = VisibilityFlag.None,
                ClearFlags     = ClearFlag.None,

                Input  = new BatchInfo(DrawTechnique.Solid, mainTexture),
                Output = finalTarget
            });

            AddRenderStep(RenderStepPosition.Last, new RenderStep {
                MatrixMode     = RenderMatrix.ScreenSpace,
                VisibilityMask = VisibilityFlag.All,
                ClearFlags     = ClearFlag.None,

                Output = finalTarget
            });

            AddRenderStep(RenderStepPosition.Last, new RenderStep {
                Id = "Resize",

                MatrixMode     = RenderMatrix.ScreenSpace,
                VisibilityMask = VisibilityFlag.None,
                ClearFlags     = ClearFlag.None
            });
        }
예제 #3
0
        public void ChangeLevel(LevelInitialization levelInit = default(LevelInitialization))
        {
            ContentResolver.Current.ResetReferenceFlag();

            if (string.IsNullOrEmpty(levelInit.LevelName))
            {
                // Next level not specified, so show main menu
                ShowMainMenu(false);
            }
            else if (levelInit.LevelName == ":end")
            {
                // End of episode

                if (!string.IsNullOrEmpty(levelInit.LastEpisodeName) && levelInit.LastEpisodeName != "unknown")
                {
                    // ToDo: Implement time
                    Preferences.Set("EpisodeEnd_Time_" + levelInit.LastEpisodeName, (int)1);

                    if (levelInit.PlayerCarryOvers.Length == 1)
                    {
                        // Save CarryOvers only in SinglePlayer mode
                        ref PlayerCarryOver player = ref levelInit.PlayerCarryOvers[0];

                        Preferences.Set("EpisodeEnd_Lives_" + levelInit.LastEpisodeName, (byte)player.Lives);
                        Preferences.Set("EpisodeEnd_Score_" + levelInit.LastEpisodeName, player.Score);
                        if (player.Ammo != null)
                        {
                            Preferences.Set("EpisodeEnd_Ammo_" + levelInit.LastEpisodeName, player.Ammo);
                        }

                        // Save WeaponUpgrades only if at least one of them is upgraded
                        if (player.WeaponUpgrades != null)
                        {
                            for (int i = 0; i < player.WeaponUpgrades.Length; i++)
                            {
                                if (player.WeaponUpgrades[i] != 0)
                                {
                                    Preferences.Set("EpisodeEnd_Upgrades_" + levelInit.LastEpisodeName, player.WeaponUpgrades);
                                    break;
                                }
                            }
                        }
                    }

                    // Remove existing continue data
                    Preferences.Remove("EpisodeContinue_Misc_" + levelInit.LastEpisodeName);
                    Preferences.Remove("EpisodeContinue_Score_" + levelInit.LastEpisodeName);
                    Preferences.Remove("EpisodeContinue_Level_" + levelInit.LastEpisodeName);
                    Preferences.Remove("EpisodeContinue_Ammo_" + levelInit.LastEpisodeName);
                    Preferences.Remove("EpisodeContinue_Upgrades_" + levelInit.LastEpisodeName);

                    Preferences.Commit();

                    Episode lastEpisode = GetEpisode(levelInit.LastEpisodeName);
                    if (lastEpisode != null && !string.IsNullOrEmpty(lastEpisode.NextEpisode))
                    {
                        // Redirect to next episode
                        Episode nextEpisode = GetEpisode(lastEpisode.NextEpisode);

                        levelInit.EpisodeName = lastEpisode.NextEpisode;
                        levelInit.LevelName   = nextEpisode.FirstLevel;

                        // Start new level
                        LevelHandler handler = new LevelHandler(this, levelInit);

                        Scene.Current.DisposeLater();
                        Scene.SwitchTo(handler);

                        GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
                        GC.Collect();
                        GC.WaitForPendingFinalizers();

                        GCSettings.LatencyMode = GCLatencyMode.LowLatency;

                        UpdateRichPresence(levelInit, null);
                    }
                    else
                    {
                        // Next episode not found...
                        ShowMainMenu(false);
                    }
                }
                else
                {
                    // Shouldn't happen...
                    ShowMainMenu(false);
                }
            }
예제 #4
0
 public LocalController(LevelHandler levelHandler)
 {
     this.levelHandler = levelHandler;
 }