Remove GameController.Mode

The difference between headless and Clyde is now handled by IoC.
This commit is contained in:
Pieter-Jan Briers
2019-05-08 22:24:50 +02:00
parent d6a9343635
commit dec103ac1b
19 changed files with 271 additions and 330 deletions
@@ -97,11 +97,6 @@ namespace Robust.Client.Graphics.Clyde
public void Render(FrameEventArgs args)
{
if (GameController.Mode != GameController.DisplayMode.Clyde)
{
return;
}
GL.ClearColor(0, 0, 0, 1);
GL.Clear(ClearBufferMask.ColorBufferBit);
@@ -174,7 +169,7 @@ namespace Robust.Client.Graphics.Clyde
.Where(o => o.Space == OverlaySpace.ScreenSpaceBelowWorld)
.OrderBy(o => o.ZIndex))
{
overlay.OpenGLRender(_renderHandle);
overlay.ClydeRender(_renderHandle);
}
_flushRenderHandle(_renderHandle);
@@ -243,7 +238,7 @@ namespace Robust.Client.Graphics.Clyde
.Where(o => o.Space == OverlaySpace.WorldSpace)
.OrderBy(o => o.ZIndex))
{
overlay.OpenGLRender(_renderHandle);
overlay.ClydeRender(_renderHandle);
}
_flushRenderHandle(_renderHandle);
@@ -262,7 +257,7 @@ namespace Robust.Client.Graphics.Clyde
.Where(o => o.Space == OverlaySpace.ScreenSpace)
.OrderBy(o => o.ZIndex))
{
overlay.OpenGLRender(_renderHandle);
overlay.ClydeRender(_renderHandle);
}
_flushRenderHandle(_renderHandle);
@@ -0,0 +1,133 @@
using System;
using System.IO;
using Robust.Client.Audio;
using Robust.Client.Graphics.Shaders;
using Robust.Client.Interfaces.Graphics;
using Robust.Shared.Maths;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.PixelFormats;
namespace Robust.Client.Graphics.Clyde
{
/// <summary>
/// Hey look, it's Clyde's evil twin brother!
/// </summary>
internal sealed class ClydeHeadless : DisplayManager, IClyde
{
// Would it make sense to report a fake resolution like 720p here so code doesn't break? idk.
public override Vector2i ScreenSize => (1280, 720);
public Vector2 MouseScreenPosition => ScreenSize / 2;
public override void SetWindowTitle(string title)
{
// Nada.
}
public override void Initialize()
{
// Nada.
}
#pragma warning disable CS0067
public override event Action<WindowResizedEventArgs> OnWindowResized;
#pragma warning restore CS0067
public void Render(FrameEventArgs args)
{
// Nada.
}
public void FrameProcess(RenderFrameEventArgs eventArgs)
{
// Nada.
}
public void ProcessInput(FrameEventArgs frameEventArgs)
{
// Nada.
}
public Texture LoadTextureFromPNGStream(Stream stream, string name = null,
TextureLoadParameters? loadParams = null)
{
using (var image = Image.Load(stream))
{
return LoadTextureFromImage(image, name, loadParams);
}
}
public Texture LoadTextureFromImage<T>(Image<T> image, string name = null,
TextureLoadParameters? loadParams = null) where T : unmanaged, IPixel<T>
{
return new DummyTexture(image.Width, image.Height);
}
public int LoadShader(ParsedShader shader, string name = null)
{
return default;
}
public void Ready()
{
// Nada.
}
public AudioStream LoadAudioOggVorbis(Stream stream)
{
// TODO: Might wanna actually load this so the length gets reported correctly.
return new AudioStream(default, default);
}
public AudioStream LoadAudioWav(Stream stream)
{
// TODO: Might wanna actually load this so the length gets reported correctly.
return new AudioStream(default, default);
}
public IClydeAudioSource CreateAudioSource(AudioStream stream)
{
return DummyAudioSource.Instance;
}
public IntPtr GetNativeWindowHandle()
{
return default;
}
private sealed class DummyAudioSource : IClydeAudioSource
{
public static DummyAudioSource Instance { get; } = new DummyAudioSource();
public bool IsPlaying => default;
public void Dispose()
{
// Nada.
}
public void StartPlaying()
{
// Nada.
}
public void SetPosition(Vector2 position)
{
// Nada.
}
public void SetPitch(float pitch)
{
// Nada.
}
public void SetGlobal()
{
// Nada.
}
public void SetVolume(float decibels)
{
// Nada.
}
}
}
}
@@ -1,26 +0,0 @@
using System;
using Robust.Client.Interfaces.Graphics;
using Robust.Shared.Maths;
namespace Robust.Client.Graphics
{
internal class DisplayManagerHeadless : DisplayManager
{
// Would it make sense to report a fake resolution like 720p here so code doesn't break? idk.
public override Vector2i ScreenSize => Vector2i.Zero;
public override void SetWindowTitle(string title)
{
// Nada.
}
public override void Initialize()
{
// Nada.
}
#pragma warning disable CS0067
public override event Action<WindowResizedEventArgs> OnWindowResized;
#pragma warning restore CS0067
}
}
@@ -21,7 +21,6 @@ namespace Robust.Client.Graphics.Drawing
internal DrawingHandle()
{
DebugTools.Assert(GameController.Mode == GameController.DisplayMode.Headless);
}
internal DrawingHandle(IRenderHandle handle, int handleId)
+17 -46
View File
@@ -79,53 +79,26 @@ namespace Robust.Client.Graphics.Overlays
throw new InvalidOperationException("Can only allocate new handles while drawing.");
}
switch (GameController.Mode)
DrawingHandle handle;
switch (Space)
{
case GameController.DisplayMode.Headless:
{
DrawingHandle handle;
switch (Space)
{
case OverlaySpace.ScreenSpaceBelowWorld:
case OverlaySpace.ScreenSpace:
handle = new DrawingHandleScreen();
break;
case OverlaySpace.WorldSpace:
handle = new DrawingHandleWorld();
break;
default:
throw new ArgumentOutOfRangeException();
}
TempHandles.Add(handle);
return handle;
}
case GameController.DisplayMode.Clyde:
{
DrawingHandle handle;
switch (Space)
{
case OverlaySpace.ScreenSpaceBelowWorld:
case OverlaySpace.ScreenSpace:
handle = _renderHandle.CreateHandleScreen();
break;
case OverlaySpace.WorldSpace:
handle = _renderHandle.CreateHandleWorld();
break;
default:
throw new ArgumentOutOfRangeException();
}
if (shader != null)
{
handle.UseShader(shader);
}
return handle;
}
case OverlaySpace.ScreenSpaceBelowWorld:
case OverlaySpace.ScreenSpace:
handle = _renderHandle.CreateHandleScreen();
break;
case OverlaySpace.WorldSpace:
handle = _renderHandle.CreateHandleWorld();
break;
default:
throw new ArgumentOutOfRangeException();
}
if (shader != null)
{
handle.UseShader(shader);
}
return handle;
}
public void Dirty()
@@ -137,10 +110,8 @@ namespace Robust.Client.Graphics.Overlays
{
}
internal void OpenGLRender(IRenderHandle renderHandle)
internal void ClydeRender(IRenderHandle renderHandle)
{
DebugTools.Assert(GameController.Mode == GameController.DisplayMode.Clyde);
try
{
_renderHandle = renderHandle;
@@ -38,48 +38,26 @@ namespace Robust.Client.Graphics.Shaders
/// </summary>
public Shader Instance()
{
switch (GameController.Mode)
if (_canvasKindInstance != null)
{
case GameController.DisplayMode.Headless:
return new Shader();
case GameController.DisplayMode.Clyde:
return _instanceOpenGL();
default:
throw new ArgumentOutOfRangeException();
return _canvasKindInstance;
}
}
private Shader _instanceOpenGL()
{
switch (Kind)
string source;
if (LightMode == LightModeEnum.Unshaded)
{
case ShaderKind.Source:
return new Shader(Source.ClydeHandle);
case ShaderKind.Canvas:
if (_canvasKindInstance != null)
{
return _canvasKindInstance;
}
string source;
if (LightMode == LightModeEnum.Unshaded)
{
source = SourceUnshaded;
}
else
{
source = SourceShaded;
}
var parsed = ShaderParser.Parse(source);
var clyde = IoCManager.Resolve<IClyde>();
var instance = new Shader(clyde.LoadShader(parsed));
_canvasKindInstance = instance;
return instance;
default:
throw new ArgumentOutOfRangeException();
source = SourceUnshaded;
}
else
{
source = SourceShaded;
}
var parsed = ShaderParser.Parse(source);
var clyde = IoCManager.Resolve<IClyde>();
var instance = new Shader(clyde.LoadShader(parsed));
_canvasKindInstance = instance;
return instance;
}
public void LoadFrom(YamlMappingNode mapping)
+4 -29
View File
@@ -45,18 +45,8 @@ namespace Robust.Client.Graphics
public static Texture LoadFromImage<T>(Image<T> image, string name = null,
TextureLoadParameters? loadParameters = null) where T : unmanaged, IPixel<T>
{
switch (GameController.Mode)
{
case GameController.DisplayMode.Headless:
return new DummyTexture(image.Width, image.Height);
case GameController.DisplayMode.Clyde:
{
var manager = IoCManager.Resolve<IClyde>();
return manager.LoadTextureFromImage(image, name, loadParameters);
}
default:
throw new ArgumentOutOfRangeException();
}
var manager = IoCManager.Resolve<IClyde>();
return manager.LoadTextureFromImage(image, name, loadParameters);
}
/// <summary>
@@ -71,18 +61,8 @@ namespace Robust.Client.Graphics
public static Texture LoadFromPNGStream(Stream stream, string name = null,
TextureLoadParameters? loadParameters = null)
{
switch (GameController.Mode)
{
case GameController.DisplayMode.Headless:
return new DummyTexture();
case GameController.DisplayMode.Clyde:
{
var manager = IoCManager.Resolve<IClyde>();
return manager.LoadTextureFromPNGStream(stream, name, loadParameters);
}
default:
throw new ArgumentOutOfRangeException();
}
var manager = IoCManager.Resolve<IClyde>();
return manager.LoadTextureFromPNGStream(stream, name, loadParameters);
}
Texture IDirectionalTextureProvider.Default => this;
@@ -103,11 +83,6 @@ namespace Robust.Client.Graphics
Width = width;
Height = height;
}
public DummyTexture()
{
DebugTools.Assert(GameController.Mode == GameController.DisplayMode.Headless);
}
}
/// <summary>