diff --git a/OpenDiablo2.Common/Interfaces/IMouseInfoProvider.cs b/OpenDiablo2.Common/Interfaces/IMouseInfoProvider.cs
new file mode 100644
index 00000000..5568867e
--- /dev/null
+++ b/OpenDiablo2.Common/Interfaces/IMouseInfoProvider.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OpenDiablo2.Common.Interfaces
+{
+ public interface IMouseInfoProvider
+ {
+ int MouseX { get; }
+ int MouseY { get; }
+ bool LeftMouseDown { get; }
+ bool RightMouseDown { get; }
+ }
+}
diff --git a/OpenDiablo2.Common/Interfaces/ITextLabel.cs b/OpenDiablo2.Common/Interfaces/ITextLabel.cs
new file mode 100644
index 00000000..1e5b568b
--- /dev/null
+++ b/OpenDiablo2.Common/Interfaces/ITextLabel.cs
@@ -0,0 +1,16 @@
+using System;
+using System.Collections.Generic;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace OpenDiablo2.Common.Interfaces
+{
+ public interface ITextLabel
+ {
+ string Text { get; set; }
+ Point Position { get; set; }
+ ISprite Font { get; set; }
+ }
+}
diff --git a/OpenDiablo2.Common/OpenDiablo2.Common.csproj b/OpenDiablo2.Common/OpenDiablo2.Common.csproj
index f1b3198b..81d86ec6 100644
--- a/OpenDiablo2.Common/OpenDiablo2.Common.csproj
+++ b/OpenDiablo2.Common/OpenDiablo2.Common.csproj
@@ -75,6 +75,8 @@
+
+
diff --git a/OpenDiablo2.SDL2/SDL2RenderWindow.cs b/OpenDiablo2.SDL2/SDL2RenderWindow.cs
index a1502134..592a4668 100644
--- a/OpenDiablo2.SDL2/SDL2RenderWindow.cs
+++ b/OpenDiablo2.SDL2/SDL2RenderWindow.cs
@@ -12,12 +12,18 @@ using Autofac;
namespace OpenDiablo2.SDL2_
{
- public sealed class SDL2RenderWindow : IRenderWindow, IRenderTarget
+ public sealed class SDL2RenderWindow : IRenderWindow, IRenderTarget, IMouseInfoProvider
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private IntPtr window, renderer;
private bool running;
public bool IsRunning => running;
+
+ public int MouseX { get; internal set; } = 0;
+ public int MouseY { get; internal set; } = 0;
+ public bool LeftMouseDown { get; internal set; } = false;
+ public bool RightMouseDown { get; internal set; } = false;
+
private readonly ILifetimeScope lifetimeScope;
public SDL2RenderWindow(ILifetimeScope lifetimeScope)
@@ -38,6 +44,8 @@ namespace OpenDiablo2.SDL2_
SDL.SDL_SetRenderDrawBlendMode(renderer, SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND);
+ SDL.SDL_ShowCursor(0);
+
running = true;
}
@@ -63,8 +71,18 @@ namespace OpenDiablo2.SDL2_
{
while (SDL.SDL_PollEvent(out SDL.SDL_Event evt) != 0)
{
+ if (evt.type == SDL.SDL_EventType.SDL_MOUSEMOTION)
+ {
+ MouseX = evt.motion.x;
+ MouseY = evt.motion.y;
+ continue;
+ }
+
if (evt.type == SDL.SDL_EventType.SDL_QUIT)
+ {
running = false;
+ continue;
+ }
}
}
diff --git a/OpenDiablo2.SDL2/SDL2Sprite.cs b/OpenDiablo2.SDL2/SDL2Sprite.cs
index e5a7605f..49d90ffd 100644
--- a/OpenDiablo2.SDL2/SDL2Sprite.cs
+++ b/OpenDiablo2.SDL2/SDL2Sprite.cs
@@ -69,9 +69,9 @@ namespace OpenDiablo2.SDL2_
private Color AdjustColor(Color source)
=> Color.FromArgb(
source.A,
- (byte)Math.Min((float)source.R * 1.2, 255),
- (byte)Math.Min((float)source.G * 1.2, 255),
- (byte)Math.Min((float)source.B * 1.2, 255)
+ (byte)Math.Min((float)source.R * 1.4, 255),
+ (byte)Math.Min((float)source.G * 1.4, 255),
+ (byte)Math.Min((float)source.B * 1.4, 255)
);
private IntPtr LoadFrame(ImageFrame frame, IntPtr renderer)
diff --git a/OpenDiablo2.Scenes/MainMenu.cs b/OpenDiablo2.Scenes/MainMenu.cs
index adb072d1..015b5bc0 100644
--- a/OpenDiablo2.Scenes/MainMenu.cs
+++ b/OpenDiablo2.Scenes/MainMenu.cs
@@ -18,33 +18,42 @@ namespace OpenDiablo2.Scenes
private readonly IRenderWindow renderWindow;
private readonly IPaletteProvider paletteProvider;
private readonly IMPQProvider mpqProvider;
+ private readonly IMouseInfoProvider mouseInfoProvider;
private float logoFrame;
- private ISprite backgroundSprite, diabloLogoLeft, diabloLogoRight, diabloLogoLeftBlack, diabloLogoRightBlack;
+ private ISprite backgroundSprite, diabloLogoLeft, diabloLogoRight, diabloLogoLeftBlack, diabloLogoRightBlack, mouseSprite;
public MainMenu(
IRenderWindow renderWindow,
IPaletteProvider paletteProvider,
- IMPQProvider mpqProvider
+ IMPQProvider mpqProvider,
+ IMouseInfoProvider mouseInfoProvider
)
{
this.renderWindow = renderWindow;
this.paletteProvider = paletteProvider;
this.mpqProvider = mpqProvider;
+ this.mouseInfoProvider = mouseInfoProvider;
//var texture = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\Logo\\logo.DC6")));
- backgroundSprite = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\trademarkscreenEXP.DC6")));
+ backgroundSprite = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\gameselectscreenEXP.dc6")));
backgroundSprite.CurrentPalette = paletteProvider.PaletteTable["Sky"];
diabloLogoLeft = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoFireLeft.DC6")));
diabloLogoLeft.CurrentPalette = paletteProvider.PaletteTable["Units"];
+
diabloLogoRight = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoFireRight.DC6")));
diabloLogoRight.CurrentPalette = paletteProvider.PaletteTable["Units"];
+
diabloLogoLeftBlack = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoBlackLeft.DC6")));
diabloLogoLeftBlack.CurrentPalette = paletteProvider.PaletteTable["Units"];
+
diabloLogoRightBlack = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoBlackRight.DC6")));
diabloLogoRightBlack.CurrentPalette = paletteProvider.PaletteTable["Units"];
+ mouseSprite = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\CURSOR\\ohand.DC6")));
+ mouseSprite.CurrentPalette = paletteProvider.PaletteTable["STATIC"];
+
logoFrame = 0f;
diabloLogoLeft.Location = new Point(400, 120);
@@ -76,6 +85,9 @@ namespace OpenDiablo2.Scenes
diabloLogoRight.Frame = (int)((float)diabloLogoRight.TotalFrames * logoFrame);
renderWindow.Draw(diabloLogoRight);
+ mouseSprite.Location = new Point(mouseInfoProvider.MouseX, mouseInfoProvider.MouseY + mouseSprite.FrameSize.Height - 1);
+ renderWindow.Draw(mouseSprite);
+
renderWindow.Sync();
}
diff --git a/Screenshot.png b/Screenshot.png
new file mode 100644
index 00000000..14379179
Binary files /dev/null and b/Screenshot.png differ