diff --git a/SMCode/SM.Base/Scene/GenericScene.cs b/SMCode/SM.Base/Scene/GenericScene.cs index 3e807a9..61bc3b7 100644 --- a/SMCode/SM.Base/Scene/GenericScene.cs +++ b/SMCode/SM.Base/Scene/GenericScene.cs @@ -66,10 +66,15 @@ namespace SM.Base.Scene /// /// /// - public virtual T GetExtension() + public virtual T GetExtension() where T : class { object ext = _extensions[typeof(T)]; - if (ext == null) throw new Exception("[Error] Tried to get a extension, that doesn't exist."); + if (ext == null) + { + Log.Write(LogType.Warning, $"Tried to get the extension '{typeof(T).Name}', that doesn't exist in the scene."); + return null; + } + return (T)ext; } diff --git a/SMCode/SM.Base/Window/GenericWindow.cs b/SMCode/SM.Base/Window/GenericWindow.cs index 0acb5b3..e523bb9 100644 --- a/SMCode/SM.Base/Window/GenericWindow.cs +++ b/SMCode/SM.Base/Window/GenericWindow.cs @@ -113,10 +113,10 @@ namespace SM.Base { _loading = false; + OnLoaded(); + _actionsAfterLoading.ForEach(a => a()); _actionsAfterLoading = null; - - OnLoaded(); } } diff --git a/SMCode/SM2D/Light/LightPostEffect.cs b/SMCode/SM2D/Light/LightPostEffect.cs index dc0d251..8ab5e97 100644 --- a/SMCode/SM2D/Light/LightPostEffect.cs +++ b/SMCode/SM2D/Light/LightPostEffect.cs @@ -8,13 +8,23 @@ namespace SM2D.Light { public class LightPostEffect : PostProcessEffect { - PostProcessShader _shader = new PostProcessShader(AssemblyUtility.ReadAssemblyFile("SM2D.Light.light.frag")); + private PostProcessShader _shader = new PostProcessShader(AssemblyUtility.ReadAssemblyFile("SM2D.Light.light.frag")); + private LightSceneExtension sceneExtension; public override void Draw(Framebuffer main) { base.Draw(main); + + _shader.Draw(main.ColorAttachments["color"], collection => + { + collection["Ambient"].SetUniform4(sceneExtension.Ambient); + }); + } - _shader.Draw(main.ColorAttachments["color"]); + public override void SceneChanged(GenericScene scene) + { + base.SceneChanged(scene); + sceneExtension = scene.GetExtension(); } } } \ No newline at end of file diff --git a/SMCode/SM2D/Light/LightSceneExtension.cs b/SMCode/SM2D/Light/LightSceneExtension.cs index fa82165..63f2c5d 100644 --- a/SMCode/SM2D/Light/LightSceneExtension.cs +++ b/SMCode/SM2D/Light/LightSceneExtension.cs @@ -4,6 +4,8 @@ namespace SM2D.Light { public class LightSceneExtension { - public Color4 Ambient; + public Color4 Ambient = Color4.White; + + } } \ No newline at end of file diff --git a/SMCode/SM2D/Pipelines/Basic2DPipeline.cs b/SMCode/SM2D/Pipelines/Basic2DPipeline.cs index 049f3e7..f9277a6 100644 --- a/SMCode/SM2D/Pipelines/Basic2DPipeline.cs +++ b/SMCode/SM2D/Pipelines/Basic2DPipeline.cs @@ -39,7 +39,14 @@ namespace SM2D.Pipelines _lightEffect.Draw(_tempWindow); scene.DrawHUD(context); + scene.DrawDebug(context); } } + + protected override void SceneChanged(Scene.Scene scene) + { + base.SceneChanged(scene); + _lightEffect.SceneChanged(scene); + } } } \ No newline at end of file diff --git a/SMCode/SM2D/Scene/Scene.cs b/SMCode/SM2D/Scene/Scene.cs index 64b6953..09f58aa 100644 --- a/SMCode/SM2D/Scene/Scene.cs +++ b/SMCode/SM2D/Scene/Scene.cs @@ -6,6 +6,7 @@ using SM.Base.Contexts; using SM.Base.Objects.Static; using SM.Base.Scene; using SM2D.Drawing; +using SM2D.Light; #endregion @@ -16,6 +17,7 @@ namespace SM2D.Scene private static DrawObject2D _axisHelper; public float AxisHelperSize = 100; + public LightSceneExtension LightInformations; static Scene() { _axisHelper = new DrawObject2D(); @@ -25,6 +27,8 @@ namespace SM2D.Scene public Scene() { _Background = new DrawBackground(Color4.Black); + + SetExtension(LightInformations = new LightSceneExtension()); } diff --git a/SM_TEST/Program.cs b/SM_TEST/Program.cs index 58a2f88..6059b7b 100644 --- a/SM_TEST/Program.cs +++ b/SM_TEST/Program.cs @@ -54,8 +54,8 @@ namespace SM_TEST } private static void WindowOnLoad(object sender, EventArgs e) - { - //scene.ShowAxisHelper = true; + { + scene.ShowAxisHelper = true; kasten = new DrawObject2D(); kasten.Texture = new Texture(new Bitmap("herosword.png")); @@ -64,7 +64,9 @@ namespace SM_TEST DrawText text = new DrawText(font, "Text"); text.Transform.Position.Set(0, 500); - scene.Objects.Add(text); + scene.HUD.Add(text); + + scene.LightInformations.Ambient = Color4.Blue; //particles.Trigger(); }