Fix problems from last commit

This commit is contained in:
UnknownShadow200 2018-08-06 01:30:16 +10:00
parent 36c425906f
commit 1e6bcd5306
3 changed files with 80 additions and 95 deletions

View File

@ -1,84 +1,72 @@
// Copyright 2014-2017 ClassicalSharp | Licensed under BSD-3 // Copyright 2014-2017 ClassicalSharp | Licensed under BSD-3
using System; using System;
using System.Drawing; using System.Drawing;
using OpenTK.Input; using OpenTK.Input;
namespace ClassicalSharp.Gui { namespace ClassicalSharp.Gui {
public delegate void ClickHandler(Game g, Widget w); public delegate void ClickHandler(Game g, Widget w);
public abstract class GuiElement : IDisposable { public abstract class GuiElement : IDisposable {
public GuiElement(Game game) { this.game = game; }
protected Game game; protected Game game;
public GuiElement(Game game) { this.game = game; }
public abstract void Init();
public abstract void Init(); public abstract void Render(double delta);
public abstract void Dispose();
public abstract void Render(double delta);
/// <summary> Causes the gui element to recreate all of its sub-elements and/or textures. </summary>
public abstract void Dispose(); /// <remarks> Typically used when bitmap font changes. </remarks>
public virtual void Recreate() { Dispose(); Init(); }
/// <summary> Causes the gui element to recreate all of its sub-elements and/or textures. </summary>
/// <remarks> Typically used when bitmap font changes. </remarks> public virtual bool HandlesKeyDown(Key key) { return false; }
public virtual void Recreate() { Dispose(); Init(); } public virtual bool HandlesKeyPress(char key) { return false; }
public virtual bool HandlesKeyUp(Key key) { return false; }
public virtual bool HandlesKeyDown(Key key) { return false; }
public virtual bool HandlesMouseDown(int mouseX, int mouseY, MouseButton button) { return false; }
public virtual bool HandlesKeyPress(char key) { return false; } public virtual bool HandlesMouseMove(int mouseX, int mouseY) { return false; }
public virtual bool HandlesMouseScroll(float delta) { return false; }
public virtual bool HandlesKeyUp(Key key) { return false; } public virtual bool HandlesMouseUp(int mouseX, int mouseY, MouseButton button) { return false; }
public virtual bool HandlesMouseDown(int mouseX, int mouseY, MouseButton button) { return false; } protected static int CalcPos(Anchor anchor, int offset, int size, int axisLen) {
if (anchor == Anchor.Min) return offset;
public virtual bool HandlesMouseMove(int mouseX, int mouseY) { return false; } if (anchor == Anchor.Max) return axisLen - size - offset;
return (axisLen - size) / 2 + offset;
public virtual bool HandlesMouseScroll(float delta) { return false; } }
public virtual bool HandlesMouseUp(int mouseX, int mouseY, MouseButton button) { return false; } public static bool Contains(int recX, int recY, int width, int height, int x, int y) {
return x >= recX && y >= recY && x < recX + width && y < recY + height;
protected static int CalcPos(Anchor anchor, int offset, int size, int axisLen) { }
if (anchor == Anchor.Min) return offset; }
if (anchor == Anchor.Max) return axisLen - size - offset;
return (axisLen - size) / 2 + offset; /// <summary> Represents a container of widgets and other 2D elements. </summary>
} /// <remarks> May cover the entire game window. </remarks>
public abstract class Screen : GuiElement {
public static bool Contains(int recX, int recY, int width, int height, int x, int y) { public Screen(Game game) : base(game) { }
return x >= recX && y >= recY && x < recX + width && y < recY + height;
} public bool HandlesAllInput, BlocksWorld, HidesHud, RenderHudOver;
}
public abstract void OnResize();
/// <summary> Represents a container of widgets and other 2D elements. </summary> protected abstract void ContextLost();
/// <remarks> May cover the entire game window. </remarks> protected abstract void ContextRecreated();
public abstract class Screen : GuiElement { }
public Screen(Game game) : base(game) { } /// <summary> Represents an individual 2D gui component. </summary>
public abstract class Widget : GuiElement {
public bool HandlesAllInput, BlocksWorld, HidesHud, RenderHudOver; public Widget(Game game) : base(game) { }
public abstract void OnResize(); public ClickHandler MenuClick;
public bool Active, Disabled;
protected abstract void ContextLost(); public int X, Y, Width, Height;
public Anchor HorizontalAnchor, VerticalAnchor;
protected abstract void ContextRecreated(); public int XOffset, YOffset;
}
public virtual void Reposition() {
/// <summary> Represents an individual 2D gui component. </summary> X = CalcPos(HorizontalAnchor, XOffset, Width, game.Width);
public abstract class Widget : GuiElement { Y = CalcPos(VerticalAnchor, YOffset, Height, game.Height);
}
public Widget(Game game) : base(game) { }
public bool Contains(int x, int y) {
public ClickHandler MenuClick; return GuiElement.Contains(X, Y, Width, Height, x, y);
public bool Active, Disabled; }
public int X, Y, Width, Height; }
public Anchor HorizontalAnchor, VerticalAnchor; }
public int XOffset, YOffset;
public virtual void Reposition() {
X = CalcPos(HorizontalAnchor, XOffset, Width, game.Width);
Y = CalcPos(VerticalAnchor, YOffset, Height, game.Height);
}
public bool Contains(int x, int y) {
return GuiElement.Contains(X, Y, Width, Height, x, y);
}
}
}

View File

@ -58,7 +58,7 @@ namespace ClassicalSharp.Audio {
if (type == SoundType.Metal) format.SampleRate = (format.SampleRate * 6) / 5; if (type == SoundType.Metal) format.SampleRate = (format.SampleRate * 6) / 5;
else format.SampleRate = (format.SampleRate * 4) / 5; else format.SampleRate = (format.SampleRate * 4) / 5;
} else { } else {
volume *= 0.50f; volume *= 0.50f;
if (type == SoundType.Metal) format.SampleRate = (format.SampleRate * 7) / 5; if (type == SoundType.Metal) format.SampleRate = (format.SampleRate * 7) / 5;
} }
@ -74,8 +74,9 @@ namespace ClassicalSharp.Audio {
for (int i = 0; i < monoOutputs.Length; i++) { for (int i = 0; i < monoOutputs.Length; i++) {
IAudioOutput output = outputs[i]; IAudioOutput output = outputs[i];
if (output == null) { if (output == null) {
outputs[i] = GetPlatformOut(); output = GetPlatformOut();
output = outputs[i]; output.Create(1);
outputs[i] = output;
} }
if (!output.IsFinished()) continue; if (!output.IsFinished()) continue;
@ -95,14 +96,6 @@ namespace ClassicalSharp.Audio {
} }
} }
IAudioOutput MakeSoundOutput(IAudioOutput[] outputs, int i) {
IAudioOutput output = GetPlatformOut();
output.Create(1);
outputs[i] = output;
return output;
}
void PlaySound(IAudioOutput output, float volume) { void PlaySound(IAudioOutput output, float volume) {
try { try {
output.SetVolume(volume); output.SetVolume(volume);

View File

@ -85,10 +85,13 @@ namespace ClassicalSharp.Audio {
musicOut.PlayStreaming(container); musicOut.PlayStreaming(container);
} catch (InvalidOperationException ex) { } catch (InvalidOperationException ex) {
HandleMusicError(ex); HandleMusicError(ex);
try { musicOut.Dispose(); } catch { }
return; return;
} catch (Exception ex) { } catch (Exception ex) {
ErrorHandler.LogError("AudioPlayer.DoMusicThread()", ex); ErrorHandler.LogError("AudioPlayer.DoMusicThread()", ex);
game.Chat.Add("&cError while trying to play music file " + file); game.Chat.Add("&cError while trying to play music file " + file);
try { musicOut.Dispose(); } catch { }
return;
} }
} }
if (disposingMusic) break; if (disposingMusic) break;
@ -120,6 +123,7 @@ namespace ClassicalSharp.Audio {
void DisposeMusic() { void DisposeMusic() {
disposingMusic = true; disposingMusic = true;
musicHandle.Set(); musicHandle.Set();
DisposeOf(ref musicOut, ref musicThread); DisposeOf(ref musicOut, ref musicThread);
} }