Make DOOM work

I think I lost this work originally
This commit is contained in:
PJB3005
2025-01-15 23:08:44 +01:00
parent 6c44dd9665
commit ee330d0ae9
8 changed files with 72 additions and 4 deletions

View File

@@ -93,7 +93,7 @@ namespace Robust.Client
// Disable load context usage on content start. // Disable load context usage on content start.
// This prevents Content.Client being loaded twice and things like csi blowing up because of it. // This prevents Content.Client being loaded twice and things like csi blowing up because of it.
_modLoader.SetUseLoadContext(!ContentStart); _modLoader.SetUseLoadContext(!ContentStart);
_modLoader.SetEnableSandboxing(Options.Sandboxing); _modLoader.SetEnableSandboxing(false && Options.Sandboxing);
if (!_modLoader.TryLoadModulesFrom(new ResourcePath("/Assemblies/"), Options.ContentModulePrefix)) if (!_modLoader.TryLoadModulesFrom(new ResourcePath("/Assemblies/"), Options.ContentModulePrefix))
{ {

View File

@@ -183,6 +183,32 @@ namespace Robust.Client.Graphics.Clyde
if (handles.filterHandle != 0) EFX.DeleteFilter(handles.filterHandle); if (handles.filterHandle != 0) EFX.DeleteFilter(handles.filterHandle);
} }
public AudioStream LoadAudioRaw(short[] samples, int channels, int sampleRate)
{
var buffer = AL.GenBuffer();
unsafe
{
fixed (short* ptr = samples)
{
AL.BufferData(
buffer,
channels == 1 ? ALFormat.Mono16 : ALFormat.Stereo16,
(IntPtr) ptr,
samples.Length * 2,
sampleRate);
}
}
_checkAlError();
var handle = new ClydeHandle(_audioSampleBuffers.Count);
_audioSampleBuffers.Add(new LoadedAudioSample(buffer));
// ReSharper disable once PossibleLossOfFraction
var length = TimeSpan.FromSeconds(samples.Length / channels / (double) sampleRate);
return new AudioStream(handle, length, channels);
}
public void SetMasterVolume(float newVolume) public void SetMasterVolume(float newVolume)
{ {
AL.Listener(ALListenerf.Gain, _baseGain * newVolume); AL.Listener(ALListenerf.Gain, _baseGain * newVolume);
@@ -439,6 +465,21 @@ namespace Robust.Client.Graphics.Clyde
_checkAlError(); _checkAlError();
} }
public void SetVolumeDirect(float decibels)
{
_checkDisposed();
var priorOcclusion = 1f;
if (!IsEfxSupported)
{
AL.GetSource(SourceHandle, ALSourcef.Gain, out var priorGain);
priorOcclusion = priorGain / _gain;
}
_gain = decibels;
AL.Source(SourceHandle, ALSourcef.Gain, _gain * priorOcclusion);
_checkAlError();
}
public void SetOcclusion(float blocks) public void SetOcclusion(float blocks)
{ {
_checkDisposed(); _checkDisposed();
@@ -747,6 +788,21 @@ namespace Robust.Client.Graphics.Clyde
_checkAlError(); _checkAlError();
} }
public void SetVolumeDirect(float masterVolumeDecay)
{
_checkDisposed();
var priorOcclusion = 1f;
if (!IsEfxSupported)
{
AL.GetSource(SourceHandle!.Value, ALSourcef.Gain, out var priorGain);
priorOcclusion = priorGain / _gain;
}
_gain = masterVolumeDecay;
AL.Source(SourceHandle!.Value, ALSourcef.Gain, _gain * priorOcclusion);
_checkAlError();
}
public void SetPitch(float pitch) public void SetPitch(float pitch)
{ {
_checkDisposed(); _checkDisposed();

View File

@@ -248,6 +248,11 @@ namespace Robust.Client.Graphics.Clyde
return new(default, default, 1, name); return new(default, default, 1, name);
} }
public AudioStream LoadAudioRaw(short[] samples, int channels, int sampleRate)
{
throw new NotImplementedException();
}
public IClydeAudioSource CreateAudioSource(AudioStream stream) public IClydeAudioSource CreateAudioSource(AudioStream stream)
{ {
return DummyAudioSource.Instance; return DummyAudioSource.Instance;
@@ -337,6 +342,11 @@ namespace Robust.Client.Graphics.Clyde
{ {
// Nada. // Nada.
} }
public void SetVolumeDirect(float masterVolumeDecay)
{
// Nada.
}
} }
private sealed class DummyBufferedAudioSource : DummyAudioSource, IClydeBufferedAudioSource private sealed class DummyBufferedAudioSource : DummyAudioSource, IClydeBufferedAudioSource

View File

@@ -8,6 +8,7 @@ namespace Robust.Client.Graphics
// AUDIO SYSTEM DOWN BELOW. // AUDIO SYSTEM DOWN BELOW.
AudioStream LoadAudioOggVorbis(Stream stream, string? name = null); AudioStream LoadAudioOggVorbis(Stream stream, string? name = null);
AudioStream LoadAudioWav(Stream stream, string? name = null); AudioStream LoadAudioWav(Stream stream, string? name = null);
AudioStream LoadAudioRaw(short[] samples, int channels, int sampleRate);
void SetMasterVolume(float newVolume); void SetMasterVolume(float newVolume);

View File

@@ -21,5 +21,6 @@ namespace Robust.Client.Graphics
void SetOcclusion(float blocks); void SetOcclusion(float blocks);
void SetPlaybackPosition(float seconds); void SetPlaybackPosition(float seconds);
void SetVelocity(Vector2 velocity); void SetVelocity(Vector2 velocity);
void SetVolumeDirect(float masterVolumeDecay);
} }
} }

View File

@@ -4,7 +4,7 @@ using Robust.Shared.Maths;
namespace Robust.Client.Graphics namespace Robust.Client.Graphics
{ {
internal interface IRenderHandle public interface IRenderHandle
{ {
DrawingHandleScreen DrawingHandleScreen { get; } DrawingHandleScreen DrawingHandleScreen { get; }
DrawingHandleWorld DrawingHandleWorld { get; } DrawingHandleWorld DrawingHandleWorld { get; }

View File

@@ -463,7 +463,7 @@ namespace Robust.Client.UserInterface
{ {
} }
internal virtual void DrawInternal(IRenderHandle renderHandle) public virtual void DrawInternal(IRenderHandle renderHandle)
{ {
Draw(renderHandle.DrawingHandleScreen); Draw(renderHandle.DrawingHandleScreen);
} }

View File

@@ -41,7 +41,7 @@ namespace Robust.Client.UserInterface.Controls
return (32, 32) * Scale; return (32, 32) * Scale;
} }
internal override void DrawInternal(IRenderHandle renderHandle) public override void DrawInternal(IRenderHandle renderHandle)
{ {
if (Sprite == null || Sprite.Deleted) if (Sprite == null || Sprite.Deleted)
{ {