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\IScene.cs" />
<Compile Include="Interfaces\ISprite.cs" />
<Compile Include="Interfaces\IMouseInfoProvider.cs" />
<Compile Include="Interfaces\ITextLabel.cs" />
<Compile Include="Models\BitStream.cs" />
<Compile Include="Models\GlobalConfiguration.cs" />
<Compile Include="Models\ImageSet.cs" />

View File

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

View File

@ -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)

View File

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

BIN
Screenshot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 KiB