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