public ActorApi(LevelHandler levelHandler) { this.levelHandler = levelHandler; }
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 }); }
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); } }
public LocalController(LevelHandler levelHandler) { this.levelHandler = levelHandler; }