mirror of
https://github.com/OpenDiablo2/OpenDiablo2
synced 2024-09-30 07:06:18 -04:00
Added mouse support. Started font support. Added screenshot
This commit is contained in:
parent
4d124ad959
commit
411d8830f1
16
OpenDiablo2.Common/Interfaces/IMouseInfoProvider.cs
Normal file
16
OpenDiablo2.Common/Interfaces/IMouseInfoProvider.cs
Normal 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; }
|
||||||
|
}
|
||||||
|
}
|
16
OpenDiablo2.Common/Interfaces/ITextLabel.cs
Normal file
16
OpenDiablo2.Common/Interfaces/ITextLabel.cs
Normal 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; }
|
||||||
|
}
|
||||||
|
}
|
@ -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" />
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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)
|
||||||
|
@ -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
BIN
Screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 467 KiB |
Loading…
Reference in New Issue
Block a user