1
1
mirror of https://github.com/OpenDiablo2/OpenDiablo2 synced 2024-06-11 02:10:43 +00:00

Added mouse support. Started font support. Added screenshot

This commit is contained in:
Tim Sarbin 2018-11-22 00:56:36 -05:00
parent 4d124ad959
commit 411d8830f1
7 changed files with 71 additions and 7 deletions

View File

@ -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; }
}
}

View File

@ -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; }
}
}

View File

@ -75,6 +75,8 @@
<Compile Include="Interfaces\IRenderWindow.cs" /> <Compile Include="Interfaces\IRenderWindow.cs" />
<Compile Include="Interfaces\IScene.cs" /> <Compile Include="Interfaces\IScene.cs" />
<Compile Include="Interfaces\ISprite.cs" /> <Compile Include="Interfaces\ISprite.cs" />
<Compile Include="Interfaces\IMouseInfoProvider.cs" />
<Compile Include="Interfaces\ITextLabel.cs" />
<Compile Include="Models\BitStream.cs" /> <Compile Include="Models\BitStream.cs" />
<Compile Include="Models\GlobalConfiguration.cs" /> <Compile Include="Models\GlobalConfiguration.cs" />
<Compile Include="Models\ImageSet.cs" /> <Compile Include="Models\ImageSet.cs" />

View File

@ -12,12 +12,18 @@ using Autofac;
namespace OpenDiablo2.SDL2_ 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 static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
private IntPtr window, renderer; private IntPtr window, renderer;
private bool running; private bool running;
public bool IsRunning => 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; private readonly ILifetimeScope lifetimeScope;
public SDL2RenderWindow(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_SetRenderDrawBlendMode(renderer, SDL.SDL_BlendMode.SDL_BLENDMODE_BLEND);
SDL.SDL_ShowCursor(0);
running = true; running = true;
} }
@ -63,8 +71,18 @@ namespace OpenDiablo2.SDL2_
{ {
while (SDL.SDL_PollEvent(out SDL.SDL_Event evt) != 0) 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) if (evt.type == SDL.SDL_EventType.SDL_QUIT)
{
running = false; running = false;
continue;
}
} }
} }

View File

@ -69,9 +69,9 @@ namespace OpenDiablo2.SDL2_
private Color AdjustColor(Color source) private Color AdjustColor(Color source)
=> Color.FromArgb( => Color.FromArgb(
source.A, source.A,
(byte)Math.Min((float)source.R * 1.2, 255), (byte)Math.Min((float)source.R * 1.4, 255),
(byte)Math.Min((float)source.G * 1.2, 255), (byte)Math.Min((float)source.G * 1.4, 255),
(byte)Math.Min((float)source.B * 1.2, 255) (byte)Math.Min((float)source.B * 1.4, 255)
); );
private IntPtr LoadFrame(ImageFrame frame, IntPtr renderer) private IntPtr LoadFrame(ImageFrame frame, IntPtr renderer)

View File

@ -18,33 +18,42 @@ namespace OpenDiablo2.Scenes
private readonly IRenderWindow renderWindow; private readonly IRenderWindow renderWindow;
private readonly IPaletteProvider paletteProvider; private readonly IPaletteProvider paletteProvider;
private readonly IMPQProvider mpqProvider; private readonly IMPQProvider mpqProvider;
private readonly IMouseInfoProvider mouseInfoProvider;
private float logoFrame; private float logoFrame;
private ISprite backgroundSprite, diabloLogoLeft, diabloLogoRight, diabloLogoLeftBlack, diabloLogoRightBlack; private ISprite backgroundSprite, diabloLogoLeft, diabloLogoRight, diabloLogoLeftBlack, diabloLogoRightBlack, mouseSprite;
public MainMenu( public MainMenu(
IRenderWindow renderWindow, IRenderWindow renderWindow,
IPaletteProvider paletteProvider, IPaletteProvider paletteProvider,
IMPQProvider mpqProvider IMPQProvider mpqProvider,
IMouseInfoProvider mouseInfoProvider
) )
{ {
this.renderWindow = renderWindow; this.renderWindow = renderWindow;
this.paletteProvider = paletteProvider; this.paletteProvider = paletteProvider;
this.mpqProvider = mpqProvider; this.mpqProvider = mpqProvider;
this.mouseInfoProvider = mouseInfoProvider;
//var texture = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\Logo\\logo.DC6"))); //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"]; backgroundSprite.CurrentPalette = paletteProvider.PaletteTable["Sky"];
diabloLogoLeft = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoFireLeft.DC6"))); diabloLogoLeft = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoFireLeft.DC6")));
diabloLogoLeft.CurrentPalette = paletteProvider.PaletteTable["Units"]; diabloLogoLeft.CurrentPalette = paletteProvider.PaletteTable["Units"];
diabloLogoRight = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoFireRight.DC6"))); diabloLogoRight = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoFireRight.DC6")));
diabloLogoRight.CurrentPalette = paletteProvider.PaletteTable["Units"]; diabloLogoRight.CurrentPalette = paletteProvider.PaletteTable["Units"];
diabloLogoLeftBlack = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoBlackLeft.DC6"))); diabloLogoLeftBlack = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoBlackLeft.DC6")));
diabloLogoLeftBlack.CurrentPalette = paletteProvider.PaletteTable["Units"]; diabloLogoLeftBlack.CurrentPalette = paletteProvider.PaletteTable["Units"];
diabloLogoRightBlack = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoBlackRight.DC6"))); diabloLogoRightBlack = renderWindow.LoadSprite(ImageSet.LoadFromStream(mpqProvider.GetStream("data\\global\\ui\\FrontEnd\\D2logoBlackRight.DC6")));
diabloLogoRightBlack.CurrentPalette = paletteProvider.PaletteTable["Units"]; 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; logoFrame = 0f;
diabloLogoLeft.Location = new Point(400, 120); diabloLogoLeft.Location = new Point(400, 120);
@ -76,6 +85,9 @@ namespace OpenDiablo2.Scenes
diabloLogoRight.Frame = (int)((float)diabloLogoRight.TotalFrames * logoFrame); diabloLogoRight.Frame = (int)((float)diabloLogoRight.TotalFrames * logoFrame);
renderWindow.Draw(diabloLogoRight); renderWindow.Draw(diabloLogoRight);
mouseSprite.Location = new Point(mouseInfoProvider.MouseX, mouseInfoProvider.MouseY + mouseSprite.FrameSize.Height - 1);
renderWindow.Draw(mouseSprite);
renderWindow.Sync(); renderWindow.Sync();
} }

BIN
Screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 KiB