mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-09-15 14:52:35 +02:00
Remove GameController.Mode
The difference between headless and Clyde is now handled by IoC.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user